如何在码头工作期间大声失败-d?

时间:2016-06-15 20:13:27

标签: docker docker-compose

使用docker-compose up -d,当我的一个容器无法启动时(即RUN命令以错误代码退出),它会安静地失败 - 如何让它大声失败?

(我是否正确地思考这个问题?我的最终目标是将Docker用于我的开发环境。我希望能够改变我的环境并立即被告知错误。我'我想尽可能多地留在Docker的真实路径上,并且犹豫是否依赖于其他工具,如screen / tmux)

2 个答案:

答案 0 :(得分:12)

由于您正在运行它分离(-d),因此docker-compose仅生成容器并退出,而不会监视任何问题。如果使用以下命令在前台运行容器:

docker-compose up --abort-on-container-exit

这应该会对任何容器问题给出一个非常明确的错误。否则,我建议您查看一些其他更高级的调度程序,这些调度程序监视正在运行的容器以从故障中恢复(例如,通用控制平面或Kubernetes)。

更新:如果您想编写docker-compose up -d以外的内容,可以执行

docker events -f "container=${compose_prefix}_" -f "event=die"

如果在那里有任何输出,你就有一个容器掉下来了。还有docker-compose events | grep "container die"

答案 1 :(得分:1)

compose/cli/main.py#L66-L68所示,docker-compose应该在(Dockerfile)构建时失败:

except BuildError as e:
        log.error("Service '%s' failed to build: %s" % (e.service.name, e.reason))
sys.exit(1)

-d (Detached mode, which runs containers in the background) is incompatible with --abort-on-container-exit以来,a"码头工作方式"将是:

  • docker compose up -d打包在脚本中
  • 向该脚本添加docker-compose logs),解析任何错误,并在发现任何错误消息时大声退出..