docker - 在不使用命令“docker run”的情况下覆盖 Dockerfile 中的入口点
问题描述
我在覆盖 Dockerfile 中的入口点时遇到问题。为此(据我所知)docker run
使用--entrypoint
选项,例如:
docker run --entrypoint "python3 main_script.py DEV"
但是,在我的情况下,我不能使用该docker run
命令,因为我必须使用 Helm 图表进行部署。
有没有docker run
使用 Helm 图表的替代方法,或者我可能没有想到的其他替代方法/解决方案?
解决方案
使用 Helm 图表进行部署
这很简单:Kubernetescommand:
覆盖 Docker ENTRYPOINT
(Kubernetesargs:
匹配 Docker CMD
)。所以你的部署规范可以说
command:
- python3
- main_script.py
- {{ .Values.environment }}
但是,通常,您不需要覆盖ENTRYPOINT
,尤其是在docker run
上下文中。An不是必需的,在行尾ENTRYPOINT
很容易覆盖。所以如果你改变你的 Dockerfile 说CMD
docker run
CMD python3 some_other_script.py
# with no ENTRYPOINT
那么你就可以
docker run my-image \
python3 main_script.py DEV
如果这不是一个选项,那么您需要注意docker run --entrypoint
只需要一个 shell 字的限制。这意味着您的命令的第一个单词--entrypoint
是 Docker 选项(在映像名称之前),其余的被解释为命令(在映像名称之后)。
docker run \
--entrypoint python3 \
my-image \
main_script.py DEV