将parameter passing给Docker容器中的Python argparse

我正在着手利用docker集装箱的第一次尝试。 我有一个python脚本,调用几个API和分析文件。 该脚本获取了用于API的服务器的URL,API密钥以及要parsing的文件的文件path的参数。 我用argparse来处理这些脚本。

如何让这些传入Docker? 我不想硬编码任何东西,因为我期望把这个脚本交给一个需要定期运行这个脚本的工程师,并根据结果采取行动。

谢谢你的帮助。 我一直在寻找,但似乎硬编码的东西到docker文件是build议 – 我希望用户能够把它们在运行时间。 或者,也许我find了答案,我只是不理解它….

我很抱歉,如果我的行话是不正确的 – 这是我第一次尝试利用Docker。

那么让我们假设你的命令在下面

python app.py "URL" "APIKEY" "filepath" 

所以你会把你的Dockerfile放在下面

 FROM python:3.6 WORKDIR /app COPY app.py . ENTRYPOINT ["python", "app.py"] 

那么运行docker集装箱的人就会像下面这样做

 docker run -v /home/tarun/project/filetoparse.yaml:/config.yaml <yourimagename> "URL" "APIKEY" /config.yaml 

如果你想给更多的灵活性,你甚至可以使用环境variables

 docker run -v /home/tarun/project/filetoparse.yaml:/config.yaml -e APIKEY="XYZ" <dockerimage> "URL" /config.yaml 

然后在你的脚本中,你可以使用os.environ['APIKEY']来读取它

你做的方式取决于你如何使用docker。 如果您想在已经运行的容器中运行脚本,可以使用exec:

 docker exec <yourContainerName> python <yourScript> <args> 

另外,如果你有一个docker镜像,你的脚本是ENTRYPOINT,那么你传递给docker run命令的任何参数都将被添加到入口点。

所以,如果你的docker文件看起来像这样:

 FROM yourbase .... ENTRYPOINT <yourScript> 

然后你可以通过运行容器本身来运行脚本:

 docker run --rm <yourImageName> <args> 

基于您的评论下面,它看起来像你想要这个选项。 你应该改变你的dockerfile来指定

 ENTRYPOINT ["python","./script.py"] 

(而不是使用CMD),然后你可以运行:

 docker run --rm <yourImageName> -a API_KEY - f FILENAME -o ORG_ID