Kubernetes 容器参数行为不正确

Sim*_*mon 1 args docker postman kubernetes newman

我想使用 Kubernetes 和postman/newmanDocker 映像来执行我的 API 测试。

在本地,我可以使用以下命令执行图像

docker run postman/newman run <url-to-collection> --env-var baseUrl=<本地主机名>

我将映像包含在 Kubernetes 清单文件中

spec:
  containers:
    - name: newman
      image: postman/newman:latest
      args:
        - run
        - '<url-to-collection>'
        - --env-var baseUrl=<kubernetes-hostname>
Run Code Online (Sandbox Code Playgroud)

当我应用清单并查看容器的日志时,出现以下错误:

error: unknown option '--global-var baseUrl=<kubernetes-hostname>'

我用引号尝试了很多东西,并使用该command部分而不是该args部分,但总是得到相同的结果。我认为 Kubernetes 以某种方式构建命令,而newman可执行文件无法理解它。但是我找不到任何相关信息。

(我还在Newman 的 GitHub 存储库中创建了一个问题)

有人可以向我解释这个问题从何而来以及我如何解决这个问题吗?

不管怎么说,多谢拉!

Dav*_*aze 5

Linux 命令由一系列单词组成。如果您在 shell 提示符下键入命令,它会负责将其拆分为单词,但在 Kubernetesargs:列表中,您需要自己拆分单词。

args:
  - run
  - '<url-to-collection>'
  # You want these as two separate arguments, so they need to be
  # two separate list items
  - --env-var
  - baseUrl=<kubernetes-hostname>
Run Code Online (Sandbox Code Playgroud)

如果两个参数位于同一列表项中,则它们是单个“单词”:

# /bin/ls "/app/some directory/some file"
command:
  - /bin/ls
  # a single argument, including embedded spaces
  - /app/some directory/some file
Run Code Online (Sandbox Code Playgroud)

相同的基本规则适用于 Docker Composeentrypoint:以及command:JSON 语法 DockerfileENTRYPOINTCMD指令,除了 Docker 原生形式都还接受一个纯字符串,它们将在空格上分割(在 Dockerfile 情况下使用 shell,但在 Dockerfile 情况下不使用 shell)。撰写案例)。

docker run您提供的命令中,主机系统上的 shell 首先处理它,因此选项--env-varbaseUrl=...参数在传递到容器之前会被分割成单独的单词。