Kubernetes 容器参数行为不正确

问题描述

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

在本地,我可以使用

执行图像

docker run postman/newman run --env-var baseUrl=

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

spec:
  containers:
    - name: newman
      image: postman/newman:latest
      args:
        - run
        - '<url-to-collection>'
        - --env-var baseUrl=<kubernetes-hostname>

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

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

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

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

谁能向我解释一下这个问题是从哪里来的,我该如何解决这个问题?

还是谢谢!

解决方法

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

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>

如果两个参数在同一个列表项中,它们就是一个“词”:

# /bin/ls "/app/some directory/some file"
command:
  - /bin/ls
  # a single argument,including embedded spaces
  - /app/some directory/some file

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

在您提供的 docker run 命令中,主机系统上的 shell 首先处理它,因此 --env-var 选项和 baseUrl=... 参数在它们被传递到容器。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...