Docker-组成命名的挂载卷

时间:2016-03-07 10:23:59

标签: docker-compose docker-volume

为了跟踪docker-compose使用的卷,我喜欢使用命名卷。这适用于“正常”卷,如

version: 2
services: 
  example-app:
    volume:
      -named_vol:/dir/in/container/volume
volumes:
  named_vol:

但我无法弄清楚如何在安装本地主机时使其工作。 我正在寻找类似的东西:

version: 2
services: 
  example-app:
    volume:
      -named_homedir:/dir/in/container/volume
volumes:
  named_homedir: /c/Users/

version: 2
services: 
  example-app:
    volume:
      -/c/Users/:/home/dir/in/container/ --name named_homedir

这是以任何可能的方式,还是我坚持使用已安装的匿名卷?

5 个答案:

答案 0 :(得分:23)

正如您可以在此GitHub问题中读到的那样,挂载命名卷 now is a thing ...自1.11或1.12起。)。 Driver specific options已记录在案。来自GitHub线程的一些注释:

docker volume create --opt type=none --opt device=<host path> --opt o=bind
  

如果主机路径不存在,则不会创建它。

     

选项以字面方式传递给mount syscall。我们可能会为某些“类型”添加特殊情况,因为它们使用起来很笨拙......就像上面引用的nfs示例一样。

- @ cpuguy83

要解决有关如何在撰写中使用该问题的具体问题,请在volumes部分下撰写:

my-named-volume:
     driver_opts:
           type: none
           device: /home/full/path #NOTE needs full path (~ doesn't work)
           o: bind

这是因为当cpuguy83在链接的github线程中写入时,选项(在引擎盖下)直接传递给mount命令。

编辑:由...评论

  • ... @ visslav,您可以使用${PWD}作为相对路径。
  • ... @ mikeyjk,您可能需要删除预先存在的卷:

    docker volume rm $(docker volume ls)
    

答案 1 :(得分:8)

主机卷与命名卷或匿名卷不同。他们的“名字”是主持人的道路。

无法将volumes部分用于主机卷。

答案 2 :(得分:7)

我最近在寻找同一个问题的答案并偶然发现了这个插件:https://github.com/CWSpear/local-persist 看起来它只允许开始的主题想要做什么。

Haven尚未尝试过,但认为这可能对某人有用。

答案 3 :(得分:6)

我一直在尝试(几乎)同样的事情,似乎可以使用类似的东西:

version: '2'
services: 
  example-app:
    volume:
      -named_vol:/dir/in/container/volume
      -/c/Users/:/dir/in/container/volume
volumes:
  named_vol:

似乎对我有用(我没有深入研究它,只是对它进行了测试)。

答案 4 :(得分:4)

OP似乎已经在使用完整路径了,但是如果像大多数人一样,您对将容器项目文件夹安装在容器中感兴趣,这可能有所帮助。

这是如何使用像@kaiser所述的driver_opts和@linuxbandit举例说明的。但您可以尝试使用通常可用的环境变量$ PWD来避免在docker-compose上下文中指定目录的完整路径:

logs-directory:
  driver_opts:
    type: none
    device: ${PWD}/logs
    o: bind