Docker从后台命令返回代码

时间:2014-01-26 21:42:14

标签: docker return-code

我在运行后台任务的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.shexit 1会使返回代码为1。它不是,它是0,它是以某种方式因为ls / &(如果删除该命令,则得到预期的返回码1)。

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

由于我正在使用设置来运行Ruby规范,我真的依赖于最后一个命令的返回代码,所以我能做些什么来让Docker返回最后一个命令的返回码?

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

1 个答案:

答案 0 :(得分:2)

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