簡體   English   中英

如何在Dockerfile中為基本映像指定運行參數?

[英]How do I specify run arguments for a base image in a Dockerfile?

我在Dockerfile中定義了一個映像,該映像具有另一個映像作為其父映像:

FROM parent_org/parent:1.0.0
...

父映像的文檔中提到了運行容器實例時可以傳遞的參數( special-arg ):

docker run parent_org/parent:1.0.0 --special-arg

如何在Dockerfile中啟用special-arg

TL; DR:您可以通過執行以下操作來使用CMD指令:

FROM parent_org/parent:1.0.0
CMD ["--special-arg"]

但是請注意,按如下所示將額外的標志傳遞給--special-arg docker run覆蓋 --special-arg (因為CMD旨在指定默認參數):

docker build -t child_org/child .
docker run child_org/child  # would imply --special-arg

docker run child_org/child --other-arg  # "--other-arg" replaces "--special-arg"

如果這不是您想要的,則應按照以下建議重新定義ENTRYPOINT

CMD和ENTRYPOINT指令

要對CMDENTRYPOINT有更多的了解,您可以看一下另一個SO答案涉及的CMD不在Dockerfile中的ENTRYPOINT之后運行

在您的情況下,您可以通過調整child_org/child/Dockerfileparent Dockerfile中定義的ENTRYPOINT ,在child映像(如果需要,默認為CMD )中重新定義ENTRYPOINT。

假設parent_org/parent/Dockerfile看起來像這樣:

FROM debian:stable  # for example

WORKDIR /usr/src/foo
COPY entrypoint.sh .
RUN chmod a+x entrypoint.sh

ENTRYPOINT ["./entrypoint.sh"]
CMD ["--default-arg"]

您可以這樣編寫child_org/child/Dockerfile

FROM parent_org/parent:1.0.0
RUN […]

# Redefine the ENTRYPOINT so the --special-arg flag is always passed
ENTRYPOINT ["./entrypoint.sh", "--special-arg"]

# If need be, redefine the list of default arguments,
# as setting ENTRYPOINT resets CMD to an empty value:
CMD ["--default-arg"]

乍一看,這也讓我感到困惑。使用command:運行它們command:聲明...命令和入口點是兩個不同的東西...入口點運行服務初始化和啟動所需的任何腳本/執行調用。 然后,該入口點腳本通常會運行邏輯以附加您從command:聲明中傳遞的所有內容,以作為進一步的參數來更改服務的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM