来自后台命令的Docker返回码

我没有得到我期望的返回码,在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 

它在容器内创build下面的文件/start_script.sh

 #!/bin/bash set -e ls / & exit 1 

所以运行docker build -t jakob/test .docker run jakob/test cat /start_script.sh你会期望返回码为1,因为exit 1 。 它不是,它是0,它是由于ls / & (如果你删除该命令,你得到预期的返回码1)。

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

当我使用安装程序运行Ruby规范时,我确实依赖于最后一条命令的返回码,所以有什么方法可以使Docker返回最后一条命令的返回码?

谢谢,我希望你能帮上忙,因为我花了很长时间来查明这些“错误的”返回码的确切问题。

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

Interesting Posts