標籤:docker
在編寫dockerfile中ENTRYPOINT CMD都只能使用一次,如果存在多個只有最後一個命令生效;
ENTRYPOINT和CMD的主要區別在於運行docker run 參數傳遞的方式不通;
EXAMPLE:
...
CMD ["echo"]
執行
docker run $IMAGE_ID echo carson
CMD 指定的命令可覆蓋 docker run 如果傳遞的命令和CMD指定的命令相同時會被覆蓋;
此echo已把CMD["echo"]給覆蓋掉,所以最後的結果是:carson
...
ENTRYPOINT ["echo"]
執行
docker run $IMAGE_ID echo carson
ENTRYPOINT 指定的命令只是一個入口 docker run 傳遞的命令都會傳遞給ENTRYPOINT,所以不會被覆蓋;
ENTRYPOINT會把容器名後面的所有內容都當成參數傳遞給其指定的命令(不會對命令覆蓋),此echo當成是參數來執行,不會把ENTRYPOINT["echo"]給覆蓋掉;
所以執行結果是:echo carson
大家肯定都有一個疑問
ENTRYPOINT docker run 這2個命令執行的順序是什麼?
在dockerfile中ENTRYPOINT指定的參數比docker run指定的參數要先執行;
EXAMPLE:
...
ENTRYPOINT["echo","carson"]
執行
docker run $IMAGE_ID good
相當於執行了:
echo carson good
RUN命令VS CMD命令
都是存在於Dockerfile中,build image執行RUN命令;RUN時執行CMD,CMD是image最終執行的命令;
本文出自 “西伯利亞·狼” 部落格,請務必保留此出處http://kernal.blog.51cto.com/8136890/1553182
docker ENTRYPOINT CMD 區別