如何将参数(文件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.yml
find一个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的任何内容