将参数传递给Docker容器中的Python argparse
我正在着手利用Docker容器的第一次尝试。我有一个调用几个API并分析文件的python脚本。该脚本获取了用于API的服务器的URL,API密钥和要解析的文件的文件路径的参数。我用argparse在脚本中处理这些。将参数传递给Docker容器中的Python argparse
如何让这些传入Docker?我不想编写任何代码,因为我期望将这个脚本交给一位需要定期运行并根据结果采取行动的工程师。
感谢您的帮助。我一直在寻找,但似乎硬编码码头文件的东西是建议 - 我希望用户能够把它们放在运行时。或者,也许我找到了答案,我只是不理解它......
我道歉,如果我的行话不对 - 这是我第一次尝试利用Docker。
你这样做的方式取决于你如何使用码头。如果你想在一个已经运行的容器中运行脚本,你可以使用EXEC:
docker exec <yourContainerName> python <yourScript> <args>
或者,如果你有一个码头工人的图像在您的脚本入口点,你传递给搬运工运行命令的任何参数将被添加到入口点。
所以,如果你的搬运工文件看起来像这样:
docker run --rm <yourImageName> <args>
根据您在下面的评论,它看起来像:
FROM yourbase
....
ENTRYPOINT <yourScript>
然后你就可以通过运行容器本身只是运行脚本你想要这个选项。你应该改变你的dockerfile指定
ENTRYPOINT ["python","./script.py"]
(而不是使用CMD),然后就可以通过运行:
docker run --rm <yourImageName> -a API_KEY - f FILENAME -o ORG_ID
因此,我的python脚本是容器的原因。我在Dockerfile中只有:“CMD [”python“,”./ script.py“]”,但我想通过“-a API_KEY -f FILENAME -o ORG_ID” –
编辑我的回复以反映您想要的内容 – Chris
因此,让我们假设你的命令低于
python app.py "URL" "APIKEY" "filepath"
所以你会把你的Dockerfile放在下面的方式
FROM python:3.6
WORKDIR /app
COPY app.py .
ENTRYPOINT ["python", "app.py"]
然后运行该泊坞窗容器中的人会不喜欢它下面
docker run -v /home/tarun/project/filetoparse.yaml:/config.yaml <yourimagename> "URL" "APIKEY" /config.yaml
如果你想给更多的灵活性,你甚至可以使用环境变量
docker run -v /home/tarun/project/filetoparse.yaml:/config.yaml -e APIKEY="XYZ" <dockerimage> "URL" /config.yaml
然后在你的脚本,您可以阅读它使用os.environ['APIKEY']
因此,我从这两个答复,并得到它在我需要它的地方。感谢您的帮助,但我不知道该标记为“答案”...... –