同样是一个脚本,一个用CMD["/opt/setup.sh"],一个用ENTRYPOING["/opt、setup.sh"],此时我都以docker run -d 去启动这个容器,此时用CMD的就可以up起来,但是ENTRYPOING却是Exited,而且他还不能start起来,我查了CMD和ENTRYPOING的区别等资料,都没有发现原因,我现在就想知道就我的这个而言,他的原理是什么?
同样是一个脚本,一个用CMD["/opt/setup.sh"],一个用ENTRYPOING["/opt、setup.sh"],此时我都以docker run -d 去启动这个容器,此时用CMD的就可以up起来,但是ENTRYPOING却是Exited,而且他还不能start起来,我查了CMD和ENTRYPOING的区别等资料,都没有发现原因,我现在就想知道就我的这个而言,他的原理是什么?
2 回答2.5k 阅读✓ 已解决
2 回答848 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答1.4k 阅读
2 回答1.3k 阅读
1 回答1.6k 阅读
1.1k 阅读
区别就是 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 显示帮助信息