雲端與容器基礎
FROM alpine
ENTRYPOINT ["ping", "-c", "3"]
CMD ["localhost"]以 docker run pinger example.com 啟動由上面的 Dockerfile 建置的映像檔 pinger。在容器內執行的指令為下列何者?
- Aping -c 3 localhost
- Bping -c 3 example.com
- Cexample.com(嘗試當作指令執行而發生錯誤)
查看答案與解析
正確答案:B. ping -c 3 example.com
以 exec 形式(JSON 陣列)撰寫的 ENTRYPOINT,是容器一定會執行的指令,CMD 則成為它的預設引數。寫在 docker run 映像檔名稱後面的引數會取代 CMD,並附加在 ENTRYPOINT 之後,因此執行的是 ping -c 3 example.com。若不帶引數以 docker run pinger 啟動,就會使用 CMD 的 localhost,成為 ping -c 3 localhost。要變更 ENTRYPOINT 本身時,使用 docker run 的 --entrypoint 選項。
- A. 這是不帶引數啟動時的動作。docker run 的引數會取代 CMD。
- B. 正確。引數 example.com 取代 CMD 的 localhost,並附加在 ENTRYPOINT 之後。
- C. 若映像檔沒有 ENTRYPOINT 只有 CMD,引數會取代整個指令而變成這樣。這裡有 ENTRYPOINT,因此會作為引數傳入。