亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Docker 容器中傳遞 python 參數(argparse)

在 Docker 容器中傳遞 python 參數(argparse)

倚天杖 2022-06-02 17:58:17
我有一個使用以下命令運行的 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 permissionRUN mkdir workspaceCOPY scan-api.sh /workspaceRUN chmod +x  /workspace/scan-api.pyCMD ["/python3", "/workspace/scan-api.py"]那么如何在 docker 文件中定義這個標記的參數呢?運行圖像時運行的命令是什么?
查看完整描述

3 回答

?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

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

  • 作為 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:])

http://img1.sycdn.imooc.com//629889da0001efe518040083.jpg

使用 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


查看完整回答
反對 回復 2022-06-02
?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

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



查看完整回答
反對 回復 2022-06-02
?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

這很令人困惑。

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

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

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

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

!


查看完整回答
反對 回復 2022-06-02
  • 3 回答
  • 0 關注
  • 628 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號