Docker-compose:一个接一个地启动容器并超时

Mik*_*ike 6 docker docker-compose

是否可以先启动myapp-1myapp-2然后休眠 30 秒,然后再启动myapp-3

尝试过这个docker-compose.yml但没有运气。

version: '3'
services:
  myapp-1:
    container_name: myapp-1
    image: myapp:latest
    restart: always
  myapp-2:
    container_name: myapp-2
    image: myapp:latest
    restart: always
  test-sleep:
    image: busybox
    command: ["/bin/sleep", "30"]
    depends_on:
      - "myapp-1"
      - "myapp-2"
  myapp-3:
    container_name: myapp-3
    image: myapp:latest
    restart: always
    depends_on:
      - "test-sleep"
Run Code Online (Sandbox Code Playgroud)

Eri*_*kMD 8

docker-compose.yml提出的无法解决您的用例,因为该depends_on属性不会等待依赖项准备好(或终止),而只是等待它们启动(即,在您的示例中,myapp-3一旦/bin/sleep 30命令启动就启动开始)。

\n

请参阅相应的文档

\n
\n

depends_on在启动 [服务] 之前不等待 [依赖项] 成为 \xe2\x80\x9cready\xe2\x80\x9d - 仅直到它们启动为止。如果您需要等待服务准备就绪,请参阅控制启动顺序以了解有关此问题的更多信息以及解决该问题的策略。

\n
\n

上面的链接提到了几个工具(包括wait-for-it),可用于等待某些服务依赖项准备就绪(前提是它们在给定的 TCP 端口公开 Web 服务)。

\n

否则,如果你只想在开始之前等待 30 秒myapp-3,假设Dockerfile包含,你可以删除并编写如下内容:myapp-3CMD ["/prog", "first argument"]test-sleep

\n
version: \'3\'\nservices:\n  myapp-1:\n    container_name: myapp-1\n    image: myapp:latest\n    restart: always\n  myapp-2:\n    container_name: myapp-2\n    image: myapp:latest\n    restart: always\n  myapp-3:\n    container_name: myapp-3\n    image: myapp:latest\n    restart: always\n    command:\n      - \'/bin/sh\'\n      - \'-c\'\n      - \'/bin/sleep 30 && /prog "first argument"\'\n    depends_on:\n      - "myapp-1"\n      - "myapp-2"\n
Run Code Online (Sandbox Code Playgroud)\n