Dockerfile中CMD命令未生效
今天在使用dockerfile构建容器镜像时,最后一步用到CMD命令启动start.sh,但是尝试几遍都未能成功执行脚本。最后查阅得知:Dockerfile中可以有多个cmd指令,但只有最后一个生效,CMD会被docker run之后的参数替换。
CMD会被docker run之后的参数替换演示:
我们启动tomcat:
docker run -itd -p 8080:8080 镜像id/镜像名称
这种启动后,访问可以正常的。因为这种启动后,直接就是使用了tomcat的dockerfile中的
CMD["/bin/bash","start.sh"]的
如果我们使用以下命令:
docker run -itd -p 8080:8080 镜像id /bin/bash
这个时候,通过浏览器访问,就不行了。为什么呢?
因为CMD会被docker run之后的参数替换
也就是dockerfile中的CMD["/bin/bash","start.sh"]被替换成了CMD["/bin/bash"]。仅启动交互式 Shell,不再执行 `start.sh`。这样相当于tomcat没启动。
Tips:
CMD和RUN命令的区别:
CMD是在docker run时候运行的
RUN是在 build是运行的