docker-up -d中如何大声失败?

使用docker-compose up -d ,当我的一个容器启动失败(即运行命令退出并显示一个错误代码)时,它会悄然失败 – 我怎样才能使它失败呢?

(我是否正确地思考这个问题?我的最终目标是使用Docker作为我的开发环境,我希望能够立即启动我的环境并立即获知错误信息,我想留在Docker的真实尽可能的path,并且犹豫依靠额外的工具如screen / tmux)

由于您运行的是分离的(-d),因此docker-compose只会生成容器并退出,而不会监视任何问题。 如果您在前台运行容器,请执行以下操作:

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

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


更新:如果你想在docker-compose up -d之外编写脚本,你可以做一个

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

如果有什么东西在那里输出的话,你就有一个容器掉下来了。 还有docker-compose events | grep "container die" docker-compose events | grep "container die"

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

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

由于-d (在后台运行容器的分离模式)与--abort-on-container-exit不兼容, --abort-on-container-exit way”将是:

  • docker compose up -d脚本
  • 添加到该脚本的docker-compose logs ),parsing任何错误,并大声退出,如果任何错误消息被发现..