使用 docker-compose,即使"command"失败,如何保持容器运行?



我在Mac Big Sur上使用docker 20.10.12。我在我的docker撰写文件中有以下片段

web:
restart: "no"
build: ../my-dir
ports:
- "3000:3000"
expose:
- '3000'
command: /bin/sh -c "foreman start -f myprocfile”
volumes:
- ../cfs-web/:/app
depends_on:
- db

问题是,如果我的"命令"失败,容器就会失效,我无法执行它

Restart: “always”

容器不断地重新启动和失败,但我仍然无法执行,因为似乎每次都在重新创建容器。有没有一种方法可以在命令失败的情况下保持容器的正常运行(这样我就可以登录并可能运行一些其他命令(?

有一些可能性。基本上,您只想在主命令失败后无限期地等待(或者等待足够长的时间以便执行到容器中(。以下是一些例子:

  • command: /bin/sh -c "foreman start -f myprocfile || sleep 2073600”
  • command: /bin/sh -c "foreman start -f myprocfile || tail -f /dev/null”
  • command: /bin/sh -c "foreman start -f myprocfile || while :; do sleep 2073600; done"

很明显,这是一个阻塞cpu周期的肮脏黑客,所以它应该只用于本地调试。

EDIT:您可能希望用;替换||,以防您的命令实际上没有失败,只是成功退出。

最新更新