Dockerfile中CMD命令未按序执行,sleep未运行致容器退出求助
问题原因及解决方法
你的Dockerfile里CMD的写法有误,导致sleep命令根本没被执行。
错误原因
sh -c的使用要求是把完整的命令字符串作为它的第二个参数,而你把wget https://httpbin.org/get、&&、sleep 1000000000000拆成了三个独立参数。此时sh只会执行第三个参数对应的wget命令,后面的&&和sleep语句会被当成sh的位置变量(类似$0、$1),完全不会参与命令逻辑。所以wget执行完成后,容器就直接退出了。
正确写法
把整个命令逻辑合并成一个字符串,作为sh -c的参数:
FROM ubuntu:latest RUN apt-get update \ && apt-get install -y iputils-ping wget CMD ["sh","-c","wget https://httpbin.org/get && sleep 1000000000000"]
额外优化建议
如果你的需求只是测试镜像构建时的下载能力,也可以把wget放到RUN阶段执行,然后单独用CMD保持容器运行,结构会更清晰:
FROM ubuntu:latest RUN apt-get update \ && apt-get install -y iputils-ping wget \ && wget https://httpbin.org/get CMD ["sleep", "1000000000000"]
这样每次启动容器时就不会重复下载文件了。
内容的提问来源于stack exchange,提问作者Eugenio.Gastelum96
相关产品推荐
相关产品推荐

