搜尋

首頁  >  問答  >  主體

dockerfile中CMD和ENTRYPOING真正的差別

同樣是一個腳本,一個用CMD["/opt/setup.sh"],一個用ENTRYPOING["/opt、setup.sh"],此時我都以docker run -d 去啟動這個容器,此時用CMD的就可以up起來,但是ENTRYPOING卻是Exited,而且他還不能start起來,我查了CMD和ENTRYPOING的區別等資料,都沒有發現原因,我現在就想知道就我的這個而言,他的原理是什麼?

世界只因有你世界只因有你2806 天前846

全部回覆(2)我來回復

  • 黄舟

    黄舟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 顯示幫助資訊

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-24 16:02:43

    查看logs先

    回覆
    0
  • 取消回覆