在执行了后台任务的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/