[英]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
有更多的了解,您可以看一下另一個SO答案中涉及的表 : CMD不在Dockerfile中的ENTRYPOINT之后運行 。
在您的情況下,您可以通過調整child_org/child/Dockerfile
到parent
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.