在Docker容器中传递python参数(argparse)

pdsfdshx  于 12个月前  发布在  Docker
关注(0)|答案(3)|浏览(218)

我有一个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文件中定义这个标记参数?运行镜像时运行什么命令?

piok6c0g

piok6c0g1#

如果要在运行时重写,可以通过两种方式执行此操作。

  • 作为参数到Docker run命令
  • 作为一个ENV到Docker运行命令

第一个是最简单的,你不需要改变任何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
我张贴的方式为一个,你可以这样做的所有args

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

5sxhfpxr

5sxhfpxr2#

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

字符串

tzcvj98z

tzcvj98z3#

很混乱
您需要使用ENTRYPOINT(或CMD)的SHELL形式来进行环境变量替换,例如:

ENTRYPOINT "/python3","/workspace/scan-api.py","--api-token=${TOKEN}" ...

字符串
然后使用以下形式运行容器:

docker run --interactive --tty --env=TOKEN=${TOKEN} ...

相关问题