问题描述
我想使用 Kubernetes 和 postman/newman
Docker 映像来执行我的 API 测试。
在本地,我可以使用
执行图像docker run postman/newman run
我将图像包含在 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 ENTRYPOINT
和 CMD
指令,除了 Docker 原生形式也都适用接受一个他们将在空格上分割的纯字符串(在 Dockerfile 情况下使用 shell,但在 Compose 情况下不使用)。
在您提供的 docker run
命令中,主机系统上的 shell 首先处理它,因此 --env-var
选项和 baseUrl=...
参数在它们被传递到容器。