首页 > 解决方案 > 第一个参数未传递给 kubernetes 部署中的映像

问题描述

我有一个带有以下入口点的泊坞窗图像。

ENTRYPOINT ["sh", "-c", "python3 -m myapp ${*}"]

我尝试在我的 kubernetes 部署中将参数传递给该图像,以便将${*}其替换为它们,但在检查日志后,似乎第一个参数被忽略了。无论图像如何,我都尝试重现结果,并在 pod 下方应用:

apiVersion: v1
kind: Pod
metadata:
  name: test
spec:
  containers:
  - name: test
    image: postgres # or any image you may like
    command: ["bash -c /bin/echo ${*}"]
    args: 
      - sth
      - serve
      - arg

当我检查日志时,我只看到serve arg,并且sth完全被忽略了。关于出了什么问题或者我应该怎么做才能将参数传递给 exec 样式的入口点的任何想法?

标签: kubernetes

解决方案


首先,你command有引用问题——你正在有效地运行bash -c echo.

其次,您需要仔细阅读该-c选项的文档(强调我的):

如果-c存在该选项,则从第一个非选项参数 command_string 中读取命令。如果 command_string 之后有参数,则将第一个参数分配给 $0,并将任何剩余的参数分配给位置参数。对 $0 的赋值设置了 shell 的名称,该名称用于警告和错误消息。

所以你要:

command: ["bash", "-c", "echo ${*}", "bash"]

给定您的 pod 定义,这将设置$0bash,然后设置$1sth$2toserve$3to arg


推荐阅读