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命令。

你可能感兴趣的:(docker的CMD和ENTRYPOINT指令区别)