我正在遷移一些網路應用程式以通過 docker compose 進行管理
似乎 docker-compose.yaml 有一個用于容器入口點的部分。
但是,我的個人 docker 檔案本身有一個 ENTRYPOINT ......我應該從 Dockerfiles 中洗掉它嗎?docker-compose 中的入口點是否覆寫了 Docker 入口點?
uj5u.com熱心網友回復:
您通常不應該在 Compose 檔案中指定entrypoint:或指定。command:最好在 Dockerfile 中指定這些。一個很大的例外是,如果您有一個可以做多種事情的容器(例如,它可以是 Web 服務器和佇列作業器,使用相同的代碼)并且您需要使用command:“不要做”來告訴它默認的東西。
我建議一個典型的設定,如:
# docker-compose.yml
version: '3.8'
services:
app:
build: .
# with neither entrypoint: nor command:
# Dockerfile
FROM ...
WORKDIR /app
COPY ...
RUN ...
# ENTRYPOINT ["./entrypoint-wrapper.sh"]
CMD ["./my_app"]
Composeentrypoint:會覆寫 DockerfileENTRYPOINT并重置CMD. Composecommand:會覆寫 Dockerfile CMD。
在 Dockerfile 中ENTRYPOINT和CMD都是可選的。如果您的基礎映像已經包含正確的命令設定 ( nginx, php:fpm),那么您可以安全地跳過兩者。
在其他方面,無論是使用CMD還是ENTRYPOINT在您的 Dockerfile 中都存在風格問題。我更喜歡CMD有兩個原因:在呼叫中更容易替換docker run ... image-name alternate command,并且有一種使用ENTRYPOINT包裝腳本進行首次設定然后啟動CMDwith 的模式exec "$@"。如果您有 JSON-array-syntax ENTRYPOINT,那么您可以將額外的命令列引數作為docker run ... image-name --option. 兩種設定都很常見。
您不應該做的事情是將解釋器放入ENTRYPOINT并將腳本名稱放入CMD. 我只在 Python 中看到過這個,但這ENTRYPOINT ["python3"]是錯誤的。一方面,這很難以與ENTRYPOINT一般相同的方式覆寫,另一方面,正常的命令覆寫格式都不起作用(如果你想用不同的選項運行相同的腳本,你仍然必須重復腳本名稱)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/527253.html
標籤:码头工人码头工人撰写
