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

我有一个python应用程序期待第一个参数作为文件path。 基本上是configuration文件。

这个文件应该在Docker中获得表单的卷/挂载

如何通过这个:

。 片段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文件中将可用

但它不是这样工作的。

我哪里去错了?

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将保持您在本地目录中的权限。 因此,请确保您在这两个文件上设置了正确的权限。

问题是你的方向错了。 格式是<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.ymlfind一个configuration文件。

现在,如果你的主机/home/tarun/wikiconfig上有一个config.yml文件的文件夹,那么你运行该容器使用

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

如果你的wikiconfig文件夹中config.yml文件的名称不同,那么你将把这个文件挂载到config.yml

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

两者都会覆盖您在构buildDockerfile时添加的configuration,因为当您从主机装入文件夹或文件时,映像中不能访问容器内具有相同path的任何内容