84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
同样是一个脚本,一个用CMD["/opt/setup.sh"],一个用ENTRYPOING["/opt、setup.sh"],此时我都以docker run -d 去启动这个容器,此时用CMD的就可以up起来,但是ENTRYPOING却是Exited,而且他还不能start起来,我查了CMD和ENTRYPOING的区别等资料,都没有发现原因,我现在就想知道就我的这个而言,他的原理是什么?
区别就是 ENTERPOINT 不被覆盖, CMD 会被覆盖。
举个例子,同样执行 docker run -it --rm <image_name> hello world
docker run -it --rm <image_name> hello world
如果是 ENTERYPOINT ["/bin/bash"] 那么实际运行的命令是 /bin/bash hello world
ENTERYPOINT ["/bin/bash"]
/bin/bash hello world
如果是 CMD ["/bin/bash"] 那么实际运行的命令是 hello world。
CMD ["/bin/bash"]
hello world
即,运行容器时的命令在 ENTERYPOINT 时是作为 ENTERYPOINT 的参数传递的;在使用 CMD 时是直接替换 CMD 的。
所以有一种取巧的用法,在 dockerfile 中同时使用二者:
ENTRYPOINT ["mongod"] CMD ["--help"]
这样用户不仅可以自定义启动 mongod 的参数,在不指定参数的时候还可以默认使用 --help 显示帮助信息
查看logs先
区别就是 ENTERPOINT 不被覆盖, CMD 会被覆盖。
举个例子,同样执行
docker run -it --rm <image_name> hello world
如果是
ENTERYPOINT ["/bin/bash"]
那么实际运行的命令是/bin/bash hello world
如果是
CMD ["/bin/bash"]
那么实际运行的命令是hello world
。即,运行容器时的命令在 ENTERYPOINT 时是作为 ENTERYPOINT 的参数传递的;在使用 CMD 时是直接替换 CMD 的。
所以有一种取巧的用法,在 dockerfile 中同时使用二者:
这样用户不仅可以自定义启动 mongod 的参数,在不指定参数的时候还可以默认使用 --help 显示帮助信息
查看logs先