82

为了跟踪 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

这是可能的还是我被安装的匿名卷卡住了?

4

5 回答 5

59

正如您在此 GitHub 问题中所读到的,现在挂载命名卷 是一件事情……从 1.11 或 1.12 开始。)。记录了驱动程序特定的选项。来自 GitHub 线程的一些注释:

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

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

选项按字面意思传递给 mount 系统调用。我们可能会为某些“类型”添加特殊情况,因为它们使用起来很尴尬……就像 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命令。

编辑:正如评论...</p>

  • ...@villasv,您可以${PWD}用于相对路径。

  • …@mikeyjk,您可能需要删除预先存在的卷:

     docker volume rm $(docker volume ls -q)
     OR
     docker volume prune
    
  • …@Camron Hudson,如果您出现no such file or directory错误,您可能需要阅读这个 SO 问题/答案,因为 Docker 不遵循符号链接,并且您的本地文件系统可能存在权限问题。

于 2016-10-13T20:38:08.240 回答
14

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

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

logs-directory:
  driver_opts:
    type: none
    device: ${PWD}/logs
    o: bind
于 2018-02-08T14:53:55.700 回答
9

我一直在尝试(几乎)相同的事情,它似乎可以与以下内容一起使用:

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

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

于 2017-07-11T16:07:14.503 回答
7

主机卷不同于命名卷或匿名卷。他们的“名字”是主机上的路径。

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

于 2016-03-09T17:25:26.710 回答
7

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

自己还没有尝试过,但认为它可能对某人有用。

于 2016-04-28T08:24:46.203 回答