Kubernetes容器args报错

范姐 发表于: 2021-01-21   最后更新时间: 2021-01-21  

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

在本地,我可以执行docker镜像运行:

docker run postman/newman run <url-to-collection> --env-var baseUrl=<local-hostname>

我在Kubernetes中使用Image:

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>'

我试了很多方式,用引号啥的,但结果总是一样。我认为Kubernetes以某种方式构建了命令,使得newman可执行文件无法理解它。但我找不到任何相关信息。

如何解决这个问题?



您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容




上一条: Kubernetes是否可以在一个Yaml文件中合并Pod.yaml和Service.yaml(不是Deployment类型)
下一条: Kubernetes v1.20.0 报"unexpected error getting claim reference: selfLink was empty, can't make reference"

  • Linux的命令是由一连串的单词组成的。如果你在shell提示符下键入一个命令,它就会负责帮你拆成单词,但在Kubernetes args: list中,你需要自己拆出单词。

    args:
      - run
      - '<url-to-collection>'
      # 你想让它们作为两个独立的参数,所以需要是2个独立列表
      - --env-var
      - baseUrl=<kubernetes-hostname>
    

    如果两个参数在同一个列表项中,就是一个 "单词"。

    # /bin/ls "/app/some directory/some file"
    command:
      - /bin/ls
      # 单个参数,包括空格
      - /app/some directory/some file
    

    同样的规则适用于Docker Compose entrypoint:command:以及JSON-syntax Dockerfile ENTRYPOINTCMD指令,只是Docker原生形式也都接受一个纯字符串,它们将在空格上进行分割(在Dockerfile情况下使用shell,但在Compose情况下不使用)。

    在你提供的docker run命令中,你的主机系统上的shell会先进行处理,所以--env-var选项和baseUrl=...参数在传递到容器中之前会被拆成单独的参数。