我正在Dockerfile中定义一个映像,该映像具有另一个映像作为其父映像:
FROM parent_org/parent:1.0.0
...
父图像的文档中提到了在运行容器实例时可以传递的参数(special-arg
)
docker run parent_org/parent:1.0.0 --special-arg
如何在Dockerfile中启用special-arg
?
答案 0 :(得分:2)
TL; DR:,您可以通过执行以下操作来使用CMD
指令:
FROM parent_org/parent:1.0.0
CMD ["--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答案table中涉及的CMD doesn't run after ENTRYPOINT in Dockerfile。
在您的情况下,您可以通过修改ENTRYPOINT
w.r.t.重新定义child
图像中的CMD
(如果需要,可以重新定义默认child_org/child/Dockerfile
)。 parent
Dockerfile中定义的内容。
假设
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"]
答案 1 :(得分:0)
这也让我感到困惑...使用command:
声明运行它们...命令和入口点是两个不同的东西...入口点运行您的服务需要执行的任何脚本/执行调用初始化并开始。然后,该入口点脚本通常会运行逻辑,以将您从command:
声明中传入的内容附加为进一步的参数,以更改服务的行为。