不使用命令 "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"
这样我就可以在你的帮助下解决我的问题了。
非常感谢您的建议和帮助!
我在覆盖 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
首先您可以按照
但还有另一种选择:您可以更改 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"
这样我就可以在你的帮助下解决我的问题了。
非常感谢您的建议和帮助!