You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dockerfile中CMD指令容器运行时未自动执行,容器内手动执行正常

问题根因

Dockerfile中两条COPY指令的目标路径配置错误,路径开头多了多余的.符号,导致文件没有被复制到预期的绝对路径:

  • COPY ./nginxstart.sh ./usr/sbin/nginxstart.sh会将脚本复制到容器当前工作目录下的相对路径usr/sbin/中,Ubuntu基础镜像默认工作目录为/root,因此脚本实际存储路径为/root/usr/sbin/nginxstart.sh,而CMD指令调用的/usr/sbin/nginxstart.sh路径下不存在对应可执行文件,容器启动时因找不到执行文件直接退出,表现为CMD没有自动执行。
  • 手动进入容器可以执行成功,通常是因为进入容器时你手动将脚本放到了正确路径,或是执行时使用的是相对路径命中了实际存放位置。

修复方案

  1. 修正Dockerfile中的COPY指令目标路径,移除开头多余的.,使用绝对路径:
#My Dockerfile
FROM ubuntu
RUN apt-get update
RUN echo 8 4 |apt-get install -y nginx
COPY ./index.html /var/www/html/
COPY ./nginxstart.sh /usr/sbin/nginxstart.sh
RUN chmod 755 /usr/sbin/nginxstart.sh
CMD ["/usr/sbin/nginxstart.sh"]
  1. 额外检查nginxstart.sh的启动逻辑,确保脚本末尾有前台驻留进程(例如添加nginx -g 'daemon off;'),避免脚本执行完成后容器直接退出,误判为CMD未生效。

验证方式

重新构建镜像后启动容器,执行docker ps查看容器是否处于运行状态,也可执行docker logs <容器ID>查看启动日志,确认脚本是否正常执行。

内容的提问来源于stack exchange,提问作者user2915977

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 04:03:03