如何控制docker-compose构建顺序?

Kim*_*Kim 18 docker docker-compose

我有三个服务要构建,A,B和C.应该首先构建A,因为B和C依赖于A(它们将A导入为图像).我认为它们应该按顺序构建,但我发现它们是按照随机顺序构建的?

那么,我该如何控制构建顺序docker-compose.yml呢?

Olu*_*ule 14

更新: 在最近的实践中,我发现我的答案仅适用于运行排序.
请参阅Quinten Scheppermans的回答和Authur Weborg关于dobi的评论.

您可以使用depends_on指令控制构建顺序.

services:
  ...

  B:
    depends_on:
      - A
  C:
    depends_on:
      - A
Run Code Online (Sandbox Code Playgroud)

  • `depends_on`对建筑阶段有影响吗?我看了[文件](https://docs.docker.com/compose/compose-file/#depends_on),它似乎只对启动阶段有影响. (4认同)
  • 我在github上联系了docker-compose.他们的回答是[`depends_on`不是docker-compose build的预期用途](https://github.com/docker/compose/issues/6332#issuecomment-437143989) (4认同)
  • 是的,它确实。不知道为什么没有记录 (2认同)
  • 在大多数情况下,[**多级构建**](https://docs.docker.com/develop/develop-images/multistage-build/)更合适. (2认同)

Qui*_*ans 7

上面接受的答案似乎不正确。

文档所示

使用depends_on时需要注意以下几点:

Depends_on在启动Web之前不会等待db和redis处于“就绪”状态-仅在它们启动之前。如果需要等待服务准备就绪,请参阅控制启动顺序以获取有关此问题的更多信息以及解决该问题的策略。

版本3不再支持条件形式的depends_on。

在以群体模式3版本的Compose文件部署堆栈时,将忽略depends_on选项。

  • 根据docker-compose的@maxkoryukov [在docker-compose build的上下文中使用depends_on而非预期用途](https://github.com/docker/compose/issues/6332#issuecomment-437143989)。我同意,它似乎会影响构建阶段,但这不是保证。 (2认同)