来自后台命令的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