我在 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"]
但是请注意,将额外的标志传递给 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 指令
更多地了解 CMD
以及 ENTRYPOINT
,你可以看看table参与这个其他 SO 答案:CMD doesn't run after ENTRYPOINT in Dockerfile .
在您的情况下,您可以重新定义 ENTRYPOINT
在你的child
图像(如果需要,默认 CMD
)通过调整 child_org/child/Dockerfile
w.r.t. parent
中定义了什么Dockerfile.
Assuming the
parent_org/parent/Dockerfile
looks like this:
FROM debian:stable # for example
WORKDIR /usr/src/foo
COPY entrypoint.sh .
RUN chmod a+x entrypoint.sh
ENTRYPOINT ["./entrypoint.sh"]
CMD ["--default-arg"]
You could write a
child_org/child/Dockerfile
like this:
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"]
关于docker - 如何在 Dockerfile 中为基础镜像指定运行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54634908/