docker的CMD和ENTRYPOINT指令区别

首先,CMD和ENTRYPOINT都可指定运行容器要执行的命令,但是Dockerfile中的CMD指令会被 docker run后的参数覆盖掉。
比如,很多image的Dockerfile中在最后都会有(比如tomcat)

...
EXPOSE 8080
CMD ["catalina.sh", "run"]

正常情况下,我们要运行这个image,只需要执行

docker run ImageName:tag 

但是,如果我们想运行这个image后,进入容器,并列出容器根目录的文件/夹情况呢?我们可能会执行

docker run -it ImageName:tag ls -l

然后发现,容器并没有启动!原因就在于ls -l 命令覆盖掉了CMD["catalina.sh","run"].

然而,ENTRYPOINT命令则不会,它既能启动容器,还能执行ls -l命令。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容