我正在尝试设置一个主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文件的服务名称。
2条答案
按热度按时间qojgxg4l1#
depends_on
的目的是在单个组合文件中处理容器依赖关系,并根据它们的依赖关系按顺序启动容器。不能在编写文件之间使用它们。
您需要在应用程序流中处理它,或者为容器编写一个入口点脚本,该脚本检查应用程序所依赖的备份服务,在启动应用程序之前可以访问。
ahy6op9u2#
您不能引用来自另一个合成文件的信息。“depends_on”必须是在同一个文件中引用的服务。
如果你试图在compose中运行堆栈的子部分,你可能想尝试docker compose的“profiles”功能。compose文件仍然很大,但你不必一次运行所有定义的服务。