- CMD RUN ENTRYPOINT均有兩種方式指定命令,即Shell,Exec
CMD
- CMD ["param1","param2"] 為 ENTRYPOINT 提供額外的參數(shù),此時 ENTRYPOINT 必須使用 Exec 格式
- shell :
CMD <命令># Dockerfile CMD echo "hello docker" # 運行鏡像輸出 hello docker # 當有多個CMD命令 僅運行最后一個 # Dockerfile CMD echo "hello docker one" CMD echo "hello docker two" 運行鏡像 僅會輸出第二個 hello docker two ``` > 命令在底層實際執(zhí)行過程中調(diào)用 `/bin/sh -c <command>` 即 `/bin/sh -c echo "hello docker"` - exec:
CMD ["可執(zhí)行文件", "參數(shù)1", "參數(shù)2"...]# Dockerfile ENV name docker ENTRYPOINT ["/bin/echo", "Hello, $name"] # 輸出 Hello, $name !!! 沒有輸出變量 , 因為指令執(zhí)行時,會直接調(diào)用 <command>,不會被 shell 解析 ,echo便不能解析變量 ############################ ENV name docker ENTRYPOINT ["/bin/sh"," -c ", "echo Hello, $name"] # hello docker
ENTRYPOIN
- Exec 格式:
ENTRYPOINT ["executable", "param1", "param2"]這是 ENTRYPOINT 的推薦格式# Dockerfile ENTRYPOINT ["/bin/echo", "Hello"] CMD ["world"] # docker run -it [image] 運行后輸出 hello world # docker run -it [image] "命令行" 運行后輸出 hello 命令行ENTRYPOINT 的 Exec 格式用于設置要執(zhí)行的命令及其參數(shù),同時可通過 CMD 提供額外的參數(shù)。
ENTRYPOINT 中的參數(shù)始終會被使用,而 CMD 的額外參數(shù)可以在容器啟動時動態(tài)替換掉。 - Shell:ENTRYPOINT
comman# Dockerfile ENTRYPOINT echo "ENTRYPOINT shell" 運行 鏡像輸出 ENTRYPOINT shell ################# [root@localhost ~]# docker run centos:v6 "cmd" ENTRYPOINT shellENTRYPOINT 的 Shell 格式會忽略任何 CMD 或 docker run 提供的參數(shù)