Передать аргументы Python (argparse) в контейнере Docker - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть скрипт 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?А что за команда запускается при запуске образа?

Ответы [ 3 ]

2 голосов
/ 21 сентября 2019

Вы можете сделать это двумя способами, если хотите переопределить во время выполнения.

  • В качестве аргумента команды запуска Docker
  • В качестве ENV для команды запуска Docker

1-й простейший, и вам не нужно ничего менять. 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:])

enter image description here

Используя 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 голос
/ 20 сентября 2019

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"]
0 голосов
/ 20 сентября 2019

Это сбивает с толку.

Вам потребуется использовать SHELL форму ENTRYPOINT (или CMD) для замены переменных среды, например,

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

А затем запустите контейнер, используя что-то в форме:

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

HTH!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...