不使用命令 "docker run" 覆盖 Dockerfile 中的入口点

Overwrite entrypoint in Dockerfile without using the command "docker run"

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

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

但是,在我的例子中,我不能使用 docker run 命令,因为我必须使用 Helm 图表进行部署。

是否有 docker run 使用 Helm 图表或我可能没有想到的其他 alternatives/solutions 的替代方法?

use Helm charts for the deployments

这很简单:Kubernetes command: 覆盖 Docker ENTRYPOINT(并且 Kubernetes args: 匹配 Docker CMD)。所以你的部署规范可以说

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

不过,通常您不需要覆盖 ENTRYPOINT,尤其是在 docker run 上下文中。 ENTRYPOINT 不是必需的,并且很容易覆盖 docker run 行末尾的 CMD。因此,如果您将 Docker 文件更改为

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

首先您可以按照. This is desribed in detail in the kubernetes documentation: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/

中的建议设置命令

但还有另一种选择:您可以更改 docker 图像的入口点。如果它是您自己的 docker 图像,那是显而易见的。但是让我们考虑一下你正在使用别人的形象。然后你可以通过构建另一个图像来修改它。 Dockerfile:

FROM old_image:latest

ENTRYPOINT python3 main_script.py DEV

然后您使用 docker build . 构建映像,使用 docker push 将其推送到您首选的 docker 存储库,并使用那个而不是原始的。

如果您还想修改图像中的其他内容,这将非常有趣。

因为我只能使用一个 docker 图像,所以我尝试了 David 在我更多地参与主题 helm 图表后建议的 helm 图表 变体我可以说:这对我有用。

我的解决方案最后看起来像这样:

command: ["python3"]       
args: ["main_script.py", "{ .Values.command.env }"]

values.yaml 中,我添加了以下内容:

command: 
    env: "DEV"

这样我就可以在你的帮助下解决我的问题了。

非常感谢您的建议和帮助!