我有一个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文件中 它将可用
但它没有这样做。
我哪里错了?
答案 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时添加的配置,因为当您从主机安装文件夹或文件时,图像中无法再访问容器内具有相同路径的任何内容