【问题标题】:Overwrite entrypoint in Dockerfile without using the command "docker run"在不使用命令“docker run”的情况下覆盖 Dockerfile 中的入口点
【发布时间】:2021-09-30 19:21:32
【问题描述】:

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

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

但是,就我而言,我不能使用 docker run 命令,因为我必须使用 Helm 图表进行部署。

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

【问题讨论】:

标签: docker dockerfile kubernetes-helm docker-entrypoint


【解决方案1】:

首先您可以按照https://stackoverflow.com/a/69242677/15087442 中的建议设置命令。这在 kubernetes 文档中有详细描述: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 存储库,并使用该存储库而不是原始存储库。

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

【讨论】:

    【解决方案2】:

    使用 Helm 图表进行部署

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

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

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

    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
    

    【讨论】:

      【解决方案3】:

      由于我只需要使用一个 docker 映像,因此在我更多地参与主题 helm charts 之后,我尝试了 David 建议的 helm charts 变体,我可以说:这对我有用.

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

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

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

      command: 
          env: "DEV"
      

      有了你的帮助,我可以解决我的问题。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-09
        • 2016-05-30
        • 2018-12-09
        • 1970-01-01
        • 2021-12-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多