访问另一个docker-compose文件上的服务名称,但该文件位于同一网络上

bybem2ql  于 2023-04-11  发布在  Docker
关注(0)|答案(2)|浏览(146)

我正在尝试设置一个主docker-compose文件,其中包含数据库,firebase auth,pubsub emulator等。这个主文件在父目录下,每个子文件夹中都有docker-compose文件。我遵循微服务架构,但不想要一个大的compose文件,因为微服务的数量超过50,最终会占用大量资源。所以我设法在同一个docker网络下创建了这些文件,但我现在面临的问题是,我不能在子文件夹docker-compose文件中使用父文件夹docker-compose文件中的服务名称。
以下是父文件夹中docker-compose服务的示例:

postgres_db:
    image: postgres:latest
    restart: always
    environment:
      - POSTGRES_PASSWORD=postgrespw
    ports:
      - "5432:5432"
    volumes:
      - postgres:/var/lib/postgresql/data

下面是子文件夹中docker-compose服务的示例:

service_1:
    build:
      context: ../../
      dockerfile: ./services/service_1/Dockerfile.dev
      target: development
    restart: always
    environment:
      - DATABASE_URL=postgresql+psycopg2://postgres:postgrespw@postgres_db:5432/localdb
      - PORT=8080
    ports:
      - "8080:8080"
    volumes:
      - ../../lib/:/app/lib
      - ../../services/service_1/:/app
    depends_on:
      - postgres_db

这将引发以下错误:
服务“service_1”依赖于未定义的服务postgres_db:无效合成项目
我需要能够在子docker-compose文件中使用父docker-compose文件的服务名称。

qojgxg4l

qojgxg4l1#

depends_on的目的是在单个组合文件中处理容器依赖关系,并根据它们的依赖关系按顺序启动容器。
不能在编写文件之间使用它们。
您需要在应用程序流中处理它,或者为容器编写一个入口点脚本,该脚本检查应用程序所依赖的备份服务,在启动应用程序之前可以访问。

ahy6op9u

ahy6op9u2#

您不能引用来自另一个合成文件的信息。“depends_on”必须是在同一个文件中引用的服务。
如果你试图在compose中运行堆栈的子部分,你可能想尝试docker compose的“profiles”功能。compose文件仍然很大,但你不必一次运行所有定义的服务。

相关问题