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



我有一个问题,覆盖在我的Dockerfile入口点。对于这个(据我所知),使用docker run--entrypoint选项,例如:

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

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

是否有一个替代docker run使用Helm图表,或其他替代/解决方案,我可能没有想到?

首先,您可以按照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存储库,并使用该存储库而不是原始存储库。

如果你还想修改图像中的其他内容,这是最有趣的。

使用Helm图表进行部署

这很简单:Kubernetescommand:覆盖DockerENTRYPOINT(Kubernetesargs:匹配DockerCMD)。所以你的部署规范可以写
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

由于我只能使用一个docker图像,我尝试了David在我更多地参与主题helm charts之后建议的helm charts变体,我可以说:这对我很有效。

我的<<p> strong>解决方案最后是这样的:
command: ["python3"]       
args: ["main_script.py", "{ .Values.command.env }"]

中的值。我添加了以下内容:

command: 
env: "DEV"

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

谢谢你的建议和帮助!

相关内容

  • 没有找到相关文章

最新更新