Docker-编写命名的挂载卷

Docker-compose named mounted volume

为了跟踪 docker-compose 使用的卷,我想使用命名卷。这非常适合 'normal' 卷,例如

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

这是否可能,或者我是否坚持使用匿名卷来安装卷?

主机卷不同于命名卷或匿名卷。他们的"name"是主机上的路径。

无法使用主机卷的 volumes 部分。

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

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

正如您在本期 GitHub 中所读到的,安装命名卷 now is a thing … since 1.11 or 1.12.). Driver specific options 已记录在案。来自 GitHub 线程的一些注释:

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

If the host path does not exist, it will not be created.

Options are passed in literally to the mount syscall. We may add special cases for certain "types" because they are awkward to use... like the nfs example [referenced above].

– @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 命令。

编辑: 评论者...

  • …@villasv,相对路径可以使用${PWD}

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

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

我一直在尝试(几乎)同样的事情,它似乎适用于类似的东西:

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

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

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

这就是如何用 driver_opts 做到这一点,就像@kaiser 说的和@linuxbandit 举例说明的那样。但是您可以尝试使用 usually 可用的环境变量 $PWD 来避免在 docker-compose 上下文中为目录指定完整路径:

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