Kubernetes 容器参数行为不正确
Kubernetes container args behave incorrect
我想使用 Kubernetes 和 postman/newman
Docker 图像来执行我的 API 测试。
在本地,我可以用
执行图像
docker run postman/newman run <url-to-collection> --env-var baseUrl=<local-hostname>
我将图像包含在 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 GitHub 的回购中创建了一个问题 here)
任何人都可以向我解释这个问题的来源以及我如何解决这个问题吗?
无论如何谢谢!
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-syntax Dockerfile ENTRYPOINT
和 CMD
指令,除了 Docker-native 形式都还接受一个纯字符串,它们将按空格拆分(在 Dockerfile 情况下使用 shell,但在Compose 案例)。
在您提供的 docker run
命令中,主机系统上的 shell 首先处理它,因此 --env-var
选项和 baseUrl=...
参数被拆分成单独的词在它们被传递到容器之前。
我想使用 Kubernetes 和 postman/newman
Docker 图像来执行我的 API 测试。
在本地,我可以用
执行图像docker run postman/newman run <url-to-collection> --env-var baseUrl=<local-hostname>
我将图像包含在 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 GitHub 的回购中创建了一个问题 here)
任何人都可以向我解释这个问题的来源以及我如何解决这个问题吗?
无论如何谢谢!
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-syntax Dockerfile ENTRYPOINT
和 CMD
指令,除了 Docker-native 形式都还接受一个纯字符串,它们将按空格拆分(在 Dockerfile 情况下使用 shell,但在Compose 案例)。
在您提供的 docker run
命令中,主机系统上的 shell 首先处理它,因此 --env-var
选项和 baseUrl=...
参数被拆分成单独的词在它们被传递到容器之前。