在编写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最终执行的命令;
时间: 2024-10-08 23:07:45