簡體   English   中英

在 Docker 容器內傳遞 python arguments (argparse)

[英]Pass python arguments (argparse) within Docker container

I have a python script that i run with the following command: 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 文件中定義這個標記的參數? 運行映像時運行的命令是什么?

您可以通過兩種方式執行此操作,因為您希望在運行時覆蓋。

  • 作為 Docker 運行命令的參數
  • 作為 Docker 運行命令的 ENV

第一個是最簡單的,你不需要改變任何東西 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

CMD與您在命令行中使用的 arguments 完全相同。

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

這很令人困惑。

您需要使用SHELL形式的ENTRYPOINT (或CMD )才能進行環境變量替換,例如

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

然后使用以下形式運行容器:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM