如何在Dockerfile中为基本映像指定运行参数?

时间:2019-02-11 16:26:45

标签: docker dockerfile

我正在Dockerfile中定义一个映像,该映像具有另一个映像作为其父映像:

FROM parent_org/parent:1.0.0
...

父图像的文档中提到了在运行容器实例时可以传递的参数(special-arg

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

如何在Dockerfile中启用special-arg

2 个答案:

答案 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指令

要对CMDENTRYPOINT有更多的了解,可以查看与此另一个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:声明中传入的内容附加为进一步的参数,以更改服务的行为。