docker - Docker从后台命令返回代码

标签 docker return-code

在执行了后台任务的Docker容器内执行脚本时,我没有得到期望的返回代码。

此示例docker文件突出了问题所在:

FROM ubuntu:latest
MAINTAINER Jakob H. Thomsen (jakob@gedefar.dk)

RUN echo "#!/bin/bash\nset -e\n\nls / &\nexit 1" > /start_script.sh
RUN chmod +x /start_script.sh 

它在容器内创建以下文件/start_script.sh:
#!/bin/bash
set -e

ls / &
exit 1

因此,运行docker build -t jakob/test .docker run jakob/test cat /start_script.sh,由于exit 1,您期望返回码为1。不是,它是0,某种程度上是由于ls / &(如果删除该命令,您将获得预期的返回码1)。

所以我的问题是,为什么ls / &覆盖了exit 1命令的返回代码?我试图使exit 1在后台运行,但它不会更改返回码...

当我使用安装程序运行Ruby规范时,我真的取决于最后一条命令的返回代码,因此,我可以做些什么使Docker返回最后一条命令的返回代码吗?

谢谢,我希望您能提供帮助,因为我花了很多时间来查明这些“错误”返回码的确切问题。

最佳答案

原来,该问题已在最新版本的Docker中修复:https://github.com/dotcloud/docker/issues/3775

关于docker - Docker从后台命令返回代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21369637/

相关文章:

nginx - 使用Docker --net = host并通过主机名连接到其他容器

ssis - 从从 SSIS 目录执行的包中获取返回/退出代码

perl - 具有零值的退出代码状态是否总是意味着在 Perl 中成功运行?

networking - 禁用docker容器中的hosts文件

linux - 如何影响 Dockerfile 中 RUN 命令的顺序?

php - 如何从单独的容器中使用PHP和Node.js

linux - tar 退出代码 123 是否始终意味着空存档?

子进程返回码中的 Python 'return not' 语句

python - 即使退出状态非零,也使用 check_output 获取输出

c# - 无法从在 Docker (Linux) 中运行的 ASP.NET Core 连接到 SQL Server 命名实例