【问题标题】:Change entrypoint of a k8s Pod, but keep the CMD更改 k8s Pod 的入口点,但保留 CMD
【发布时间】:2021-06-09 21:22:14
【问题描述】:

如何在 Kubernetes 部署中更改 Docker ENTRYPOINT,而不更改 Docker CMD

在 Pod 中我会这样做

image: "alpine"
entrypoint: "/myentrypoint"

但这会覆盖ENTRYPOINT 来自DockerfileCMD

documentation 没有提及它,但似乎错过了一个重要的用例。

【问题讨论】:

  • 更改容器入口点的大多数情况也会重置命令; Dockerfile ENTRYPOINTdocker run --entrypoint 也都重置了命令部分。您是否有更具体的用例,您想重置入口点 (Kubernetes command:) 但保留命令 (Kubernetes args:)?
  • ENTRYPOINTdocker exec 一起使用,而CMD 是默认值,docker run 未指定任何内容。我可以使用默认的run 服务(用CMD 指定),FROM 我正在扩展的图像。但我想自定义其ENTRYPOINT 脚本来处理特定的exec 命令。
  • 我知道我可以将commandargs 一起使用,但我不想手动与基本图像保持同步(我无法控制)。使用时很不方便:BaseImageWithCMD -> MyBaseImage -> MyActualImage -> KubernetesWithCustomENTRYPOINT
  • 启动容器时会使用入口点部分和命令部分(连接成带有参数的单个命令)。在docker execkubectl exec 中都没有使用。同样,更具体的用例可能有助于提出不同的方法。
  • 我的用例是扩展入口点功能,因为当我在 pod 中运行的容器上使用 kubectl exec 时。我想在执行非默认命令时执行额外的检查(基本图像入口点没有),

标签: docker kubernetes dockerfile command docker-entrypoint


【解决方案1】:

那不是一回事。 Dockerfile 中的 ENTRYPOINT == PodSpec 中的 command:CMD == args:。所以只需覆盖 command 而不是 args

【讨论】:

  • 如果您查看注释,在上面的链接文档中,写着:“如果您为容器提供命令但没有args仅使用提供的命令。默认的 EntryPoint 和 Docker 映像中定义的默认 Cmd 将被忽略。"
  • 是的,您需要重新声明这些值,但您不需要更改它们。
猜你喜欢
  • 2019-12-19
  • 2022-11-19
  • 2020-11-05
  • 2020-09-24
  • 1970-01-01
  • 1970-01-01
  • 2013-04-24
  • 2013-03-24
  • 2020-04-24
相关资源
最近更新 更多