【问题标题】: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
【解决方案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"
有了你的帮助,我可以解决我的问题。
非常感谢您的建议和帮助!