我对Docker中的端口根本不了解。我找不到任何很好的材料向我解释。我刚刚发现有一个主机端口和一个内部端口。据我了解,ext ...

问题描述 投票:0回答:1

services: main: ports: - 3002:3000 depends_on: - main_db networks: - backend main_db: image: postgres:16 container_name: main_db ports: - 5432:5432 volumes: - main_db_pgdata:/var/lib/postgresql/data networks: - backend test: ports: - 3003:3000 depends_on: - test_db networks: - backend test_db: image: postgres:16 container_name: test_db ports: - 5433:5432 volumes: - test_db_pgdata:/var/lib/postgresql/data networks: - backend volumes: main_db_pgdata: {} test_db_pgdata: {} networks: backend: driver: bridge

这里是我的作品的脱衣舞版本。 我试图为每种服务做一个独特的内部端口,但是在尝试启动服务时,我总是遇到问题,数据库存在一些问题,所以我只是停下来。我什至不知道哪种方式,AI说了同样的话

	

如果您有某种服务器流程,它会在端口上听。  PostgreSQL Server在端口5432上听;典型的节点Express服务器在端口3000上听;等等。  Docker的内部网络层意味着您不需要重新配置服务器端口即可没有冲突(您的示例设置在5432和3000端口中都有两项在内部侦听的服务,这还可以)。

容器内部的过程必须在0.0.0.0(“所有接口”)上聆听,而不是127.0.0.1(“仅“仅容器 - 私人locivate localhost”)。

第二次

必须与该进程使用的端口编号完全匹配。 您不能为此端口选择一个任意号码,通常不值得重新配置预制图像以选择其他端口。
database postgresql docker docker-compose prisma
1个回答
0
投票
    当您在容器之间打电话时:
  1. 您始终使用服务的内部端口。

    ports:

    不需要或考虑。

    将服务的撰写服务名称作为主机名。 您无需设置ports:

    如果您确实有
    container_name:

    ,那么两个容器需要一个共同的网络。 但是,对于几乎所有撰写应用程序,正确的设置是删除所有blocks,然后让创建一个为您创建一个名为您的网络。
  2. 对于您的服务器,您应该设置

    networks:

    以包括撰写服务名称和标准的PostgreSQL端口;
      networks:
    • 如您所示。 如果您需要从外部Docker运行迁移,则主机名是不同的(可能是
      default
      ),并且端口号将是第一个
    • DATABASE_URL
    • 编号。
    • 您提到一个文件。 撰写有两个单独的环境变量处理。 除非您明确指定组合
    • main_db:5432
      ,否则主机系统上的
      localhost
      文件将不会自动注入容器中。
      
      在您显示的设置中,您在同一组合文件中有两个单独的应用程序副本。  不过,撰写的概念是
    • 项目名称
    ,它在其生成的名称中包含项目名称。 您可以将其与组合环境变量替换结合在一起,仅包含撰写文件中的应用程序的一个副本。

    因此,我可能会将撰写文件重写为:
    ports:
    我删除了不必要的
    .env
    env_file:

    设置,并在您可能已经拥有的几个
  3. .env
  4. version: '3.8' # not harmful, compatible with older versions of Compose tool, useful for documenting new Compose feature requirements services: app: build: . ports: - ${APP_PORT:-3002}:3000 depends_on: - db environment: DATABASE_URL: postgresql://user:passw0rd@db:5432/mydb db: image: postgres:16 volumes: - db_pgdata:/var/lib/postgresql/data environment: { ... } volumes: db_pgdata:

    块中添加了。  这里只有一个设置的副本。
    
    您可以在端口3002(撰写文件的默认值)上运行此侦听的一本副本AS
    networks:
    在端口3003

    上收听第二份副本
  5. container_name:
  6. 注意,在撰写文件中指定了build:(对于基于撰写的设置非常具体),但相反,它在组合设置的两个副本上是相同的。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.