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"]
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"]