首页 > 解决方案 > 在不使用命令“docker run”的情况下覆盖 Dockerfile 中的入口点

问题描述

我在覆盖 Dockerfile 中的入口点时遇到问题。为此(据我所知)docker run使用--entrypoint选项,例如:

docker run --entrypoint "python3 main_script.py DEV"

但是,在我的情况下,我不能使用该docker run命令,因为我必须使用 Helm 图表进行部署。

有没有docker run使用 Helm 图表的替代方法,或者我可能没有想到的其他替代方法/解决方案?

标签: dockerdockerfilekubernetes-helmdocker-entrypoint

解决方案


使用 Helm 图表进行部署

这很简单:Kubernetescommand:覆盖 Docker ENTRYPOINT(Kubernetesargs:匹配 Docker CMD)。所以你的部署规范可以说

command:
  - python3
  - main_script.py
  - {{ .Values.environment }}

但是,通常,您不需要覆盖ENTRYPOINT,尤其是在docker run上下文中。An不是必需的,在行尾ENTRYPOINT很容易覆盖。所以如果你改变你的 Dockerfile 说CMDdocker 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

推荐阅读