本文介紹Dockerfile的 ENTRYPOINT指令的含義。
先回顧下CMD指令的含義,CMD指令可以指定容器啟動時要執行的命令,但它可以被docker run命令的參數覆蓋掉。
ENTRYPOINT 指令和CMD類似,它也可用戶指定容器啟動時要執行的命令,但如果dockerfile中也有CMD指令,CMD中的參數會被附加到ENTRYPOINT 指令的后面。 如果這時docker run命令帶了參數,這個參數會覆蓋掉CMD指令的參數,並也會附加到ENTRYPOINT 指令的后面。
這樣當容器啟動后,會執行ENTRYPOINT 指令的參數部分。
可以看出,相對來說ENTRYPOINT指令優先級更高。
我們來看個例子,下面是Dockerfile的內容
#test FROM ubuntu MAINTAINER hello RUN echo hello1 > test1.txt RUN echo hello2 > /test2.txt EXPOSE 80 ENTRYPOINT ["echo"] CMD ["defaultvalue"]
假設通過該Dockerfile構建的鏡像名為 myimage。
1、當運行 docker run myimage 輸出的內容是 defaultvalue,可以看出CMD指令的參數得確是被添加到ENTRYPOINT指令的后面,然后被執行。
2、當運行docker run myimage hello world 輸出的內容是 hello world ,可以看出docker run命令的參數得確是被添加到ENTRYPOINT指令的后面,然后被執行,這時CMD指令被覆蓋了。
3、另外我們可以在docker run命令中通過 --entrypoint 覆蓋dockerfile文件中的ENTRYPOINT設置,如:
docker run --entrypoint="echo" myimage good 結果輸出good
注意,不管是哪種方式,創建容器后,通過 dokcer ps查看容器信息時,COMMOND列會顯示最終生效的啟動命令。