同樣是一個腳本,一個用CMD["/opt/setup.sh"],一個用ENTRYPOING["/opt、setup.sh"],此時我都以docker run -d 去啟動這個容器,此時用CMD的就可以up起來,但是ENTRYPOING卻是Exited,而且他還不能start起來,我查了CMD和ENTRYPOING的區別等資料,都沒有發現原因,我現在就想知道就我的這個而言,他的原理是什麼?
黄舟2017-04-24 16:02:43
區別就是 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 中同時使用二者:
ENTRYPOINT ["mongod"]
CMD ["--help"]
這樣使用者不僅可以自訂啟動 mongod 的參數,在不指定參數的時候還可以預設使用 --help 顯示幫助資訊