我有一个问题,覆盖在我的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存储库,并使用该存储库而不是原始存储库。
如果你还想修改图像中的其他内容,这是最有趣的。
这很简单:Kubernetes使用Helm图表进行部署
command:
覆盖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"
这样我就可以在你的帮助下解决我的问题。
谢谢你的建议和帮助!