首页 > 代码库 > docker ENTRYPOINT CMD 区别

docker ENTRYPOINT CMD 区别

在编写dockerfile中ENTRYPOINT CMD都只能使用一次,如果存在多个只有最后一个命令生效;


ENTRYPOINT和CMD的主要区别在于运行docker run 参数传递的方式不通;


EXAMPLE:

...

CMD ["echo"]

执行

docker run $IMAGE_ID echo carson

CMD 指定的命令可覆盖 docker run 如果传递的命令和CMD指定的命令相同时会被覆盖;

此echo已把CMD["echo"]给覆盖掉,所以最后的结果是:carson


...

ENTRYPOINT ["echo"]

执行

docker run $IMAGE_ID echo carson

ENTRYPOINT 指定的命令只是一个入口 docker run 传递的命令都会传递给ENTRYPOINT,所以不会被覆盖;

ENTRYPOINT会把容器名后面的所有内容都当成参数传递给其指定的命令(不会对命令覆盖),此echo当成是参数来执行,不会把ENTRYPOINT["echo"]给覆盖掉;

所以执行结果是:echo carson


大家肯定都有一个疑问

ENTRYPOINT  docker run 这2个命令执行的顺序是什么?

在dockerfile中ENTRYPOINT指定的参数比docker run指定的参数要先执行;

EXAMPLE:

...

ENTRYPOINT["echo","carson"]

执行

docker run $IMAGE_ID good

相当于执行了:

echo carson good


RUN命令VS CMD命令

都是存在于Dockerfile中,build image执行RUN命令;RUN时执行CMD,CMD是image最终执行的命令;








本文出自 “西伯利亚·狼” 博客,请务必保留此出处http://kernal.blog.51cto.com/8136890/1553182

docker ENTRYPOINT CMD 区别