Docker CMD 不接受构建参数

Docker CMD not accepting build arg

DockerFile

    FROM thoom/pyresttest
    ARG url
    ENV api_url=$url
    COPY ./tests usr/src/app
    WORKDIR usr/src/app
    ENTRYPOINT [ "pyresttest" ]
    RUN echo "Oh dang look at that $url"
    CMD [ "$api_url","api_test.yml" ]

api_test.yml

- config:
      - testset: "Basic tests"
      - timeout: 100 # Increase timeout from the default 10 seconds
- test:
      - name: "get"
      - url: "/prod/URLS"
      - method: "GET"
      - expected_status: [200]

- test:
      - name: "post"
      - url: "/prod/URLS"
      - method: "POST"
      - body: '{ "url_name": "www.youtube.com" }'
      - headers: { "Content-Type": "application/json" }
      - expected_status: [200]
      - extract_binds:
            - "id": { "jsonpath_mini": "Item.url_id" }

- test:
      - name: "post"
      - url: "/prod/URLS"
      - method: "PATCH"
      - body: { template: '{"url_name": "www.cnn.com","url_id": "$id"}' }
      - headers: { "Content-Type": "application/json" }
      - expected_status: [200]

- test:
      - name: "post"
      - url: "/prod/URLS"
      - method: "DELETE"
      - body: { template: '{"url_id": "$id"}' }
      - headers: { "Content-Type": "application/json" }
      - expected_status: [200]

docker build -t rest-api-test . --build-arg url=myapiurl.com

我在构建它时试图将我的 url 作为构建参数传递给我的 Dockerfile 但由于某种原因它在 CMD 中不接受它并且当我 运行 我的构建文件时我的所有测试都失败了由于 url。但是当我在 CMD 中硬编码我的 url 时,我所有的测试都可以工作。为什么 CMD 不接受我传递给 --build-args 的 url?

PS:努力学习docker因为我是新手

您正在使用 exec 形式的 CMD 语句。那不是 运行 和 shell,所以你不能在你的命令中使用环境变量。

您可以通过两种方式在您的 CMD 语句中 运行 a shell。要么使用 shell 形式

CMD $api_url api_test.yml

或 运行 显式 shell 的 exec 表单

CMD ["/bin/sh", "-c", "$api_url apt_test.yml"]