我有一个使用以下命令运行的python脚本:
python3 scan.py --api_token 5563ff177863e97a70a45dd4 --base_api_url http://101.102.34.66:4242/scanjob/ --base_report_url http://101.102.33.66:4242/ --job_id 42
当我在命令行上运行
在我的Dockerfile中,我尝试了ARG和ENV。似乎没有任何作用
#ARG api_token
#ARG username
#ARG password
# Configure AWS arguments
#RUN aws configure set aws_access_key_id $AWS_KEY \
# && aws configure set aws_secret_access_key $AWS_SECRET_KEY \
# && aws configure set default.region $AWS_REGION
### copy bash script and change permission
RUN mkdir workspace
COPY scan-api.sh /workspace
RUN chmod +x /workspace/scan-api.py
CMD ["/python3", "/workspace/scan-api.py"]
那么我该如何在docker文件中定义该标记的参数? 在运行映像时运行的命令是什么?
答案 0 :(得分:2)
您可以通过两种方式执行此操作,因为您想在运行时进行覆盖。
1st最简单,您无需更改任何Dockerfile
docker run --rm my_image python3 /workspace/scan-api.py --bar tet --api_token 5563ff177863e97a70a45dd4 --base_api_url http://101.102.34.66:4242/scanjob/ --base_report_url http://101.102.33.66:4242/ --job_id
和我的简单脚本
import sys
print ("All ARGs",sys.argv[1:])
使用ENV,您需要更改Dockerfile
我正在发布一种方法,您可以对所有参数进行操作
FROM python:3.7-alpine3.9
ENV API_TOKEN=default_token
CMD ["sh", "-c", "python /workspace/scan-api.py $API_TOKEN"]
因此,您可以在运行时覆盖它们,或者可以使用某些默认值运行。
docker run -it --rm -e API_TOKEN=new_token my_image
答案 1 :(得分:1)
CMD
接受与您在命令行中使用的完全相同的参数。
CMD ["/python3", "scan.py", "--api_token", "5563ff177863e97a70a45dd4", "--base_api_url", "http://101.102.34.66:4242/scanjob/", "--base_report_url", "http://101.102.33.66:4242/", "--job_id", "42"]
答案 2 :(得分:0)
令人困惑。
您需要使用ENTRYPOINT
(或CMD
)的SHELL形式来进行环境变量替换,例如
ENTRYPOINT "/python3","/workspace/scan-api.py","--api-token=${TOKEN}" ...
然后使用以下形式运行容器:
docker run --interactive --tty --env=TOKEN=${TOKEN} ...
HTH!