我需要构建三个服务,A、B和C。A应该是第一个构建的,因为B和C依赖于A(它们把A作为镜像导入)。我原本以为它们应该按顺序构建,但我发现它们是以随机顺序构建的?
那么,在docker-compose.yml
中如何控制构建顺序呢?
我需要构建三个服务,A、B和C。A应该是第一个构建的,因为B和C依赖于A(它们把A作为镜像导入)。我原本以为它们应该按顺序构建,但我发现它们是以随机顺序构建的?
那么,在docker-compose.yml
中如何控制构建顺序呢?
以上被接受的答案似乎不正确。
根据文档所示:
使用 depends_on 时需注意以下几点:
depends_on 不会等待 db 和 redis “就绪”后才启动 web - 只要它们已经启动便可。 如果您需要等待服务就绪,请查看控制启动顺序以了解此问题并获取解决方案的策略。
版本3不再支持 depends_on 的条件形式。
在使用版本3 Compose文件部署堆栈模式时,depends_on选项将被忽略。
depends_on
在docker-compose build
中不是预期的用法。我同意,它似乎会影响构建阶段,但不能保证。 - Arthur Weborgdepends_on
从相同的基础镜像构建自定义镜像。 - maxkoryukov更新:最近的实践中,我发现我的回答仅与运行顺序有关。
请参考Quinten Scheppermans的回答和Authur Weborg关于 dobi 的评论。
您可以使用depends_on
指令控制构建顺序。
services:
...
B:
depends_on:
- A
C:
depends_on:
- A
dobi
。如果我没记错的话,基于服务依赖关系的有序构建行为已经改变了;正如你所指出的,现在只与有序运行有关。我会编辑答案并引用你的评论。 - Oluwafemi Suledocker-compose.yml
文件中的顺序构建镜像。请注意保留HTML标记。DOCKER_BUILDKIT=0 docker-compose build
如果您仍然希望并行构建镜像,可以考虑在多个docker-compose.yml
文件中定义services
进行构建,然后在另一个docker-compose.yml
文件中进行部署。
depends_on: - foo
,然后使用docker-compose run bar
命令。# docker-compose.yml
services:
foo:
. . .
bar:
. . .
depends_on:
- foo
然后运行,
# terminal
user@Name Docker % docker-compose run bar
尽可能保留self.services的原始顺序,根据需要重新排序以解决依赖关系。
因此,对我而言,通过手动将依赖服务排在前面,然后按照其他服务使用的顺序进行排序,最后是其他服务,这种方法可以实现。
示例
version: '3'
services:
mydb:
image: mydb
serviceA:
build:
dockerfile: DockerfileA
depends_on:
- mydb
serviceB:
build:
dockerfile: DockerfileB # which contains 'FROM serviceA'
depends_on:
- mydb
来源:https://github.com/docker/compose/issues/5228#issuecomment-565469948
docker-compose build
来构建镜像,还是说docker-compose up -d
来构建/运行容器? - Arthur Weborg