如何将参数(文件路径)传递给Docker中的python应用程序

时间:2017-09-14 18:01:42

标签: docker

我有一个python应用程序,期望第一个参数作为文件路径。基本上是配置文件。

这个文件应该在Docker中获得表单卷/ mount

如何传递:

。片段 Pytohn:

with open(sys.argv[1], 'r') as ymlfile:
    cfg = yaml.load(ymlfile)

Docker文件

COPY install.py /wiki/install.py
CMD [ "python", "/wiki/install.py", "/config/config.yml"]

运行图像命令

sudo docker run -v /config:/home/example/config/ app-wiki

我期待/ home / example / config /中可用的config.yml文件将被复制到/ config目录和Docker文件中 它将可用

但它没有这样做。

我哪里错了?

2 个答案:

答案 0 :(得分:0)

docker CMD的工作方式是您需要确保将文件以正确的权限复制到正确的位置。

示例:

RUN mkdir -p /config
RUN mkdir -p /wiki
ADD cp <your-location> /config/config.yml
ADD install.py /wiki/install.py
CMD [ "python", "/wiki/install.py", "/config/config.yml"]

此外,docker将保留您在本地目录中具有的相同权限。因此,请确保您对这两个文件都设置了正确的权限。

答案 1 :(得分:0)

问题是你的方向错了。格式为<hostpath>:<containerpath>

下面

sudo docker run -v /config:/home/example/config/ app-wiki

应该是

sudo docker run -v /home/example/config/:/config app-wiki

执行/home/example/config/中的配置将在/config文件夹

的容器中提供

修改-1

添加了一些解释,以清除你的怀疑。

COPY install.py /wiki/install.py
CMD [ "python", "/wiki/install.py", "/config/config.yml"]

运行上面的图片时,我们希望/config/config.yml可以使用配置。

现在,如果您的主机/home/tarun/wikiconfig上有一个config.yml文件的文件夹,那么您可以使用

运行容器
sudo docker run -v /home/tarun/wikiconfig:/config app-wiki

如果config.yml文件夹中wikiconfig文件的名称不同,则您将文件挂载到config.yml

sudo docker run -v /home/tarun/wikiconfig/myconfig.yml:/config/config.yml app-wiki

两者都会覆盖您在构建Dockerfile时添加的配置,因为当您从主机安装文件夹或文件时,图像中无法再访问容器内具有相同路径的任何内容