Docker-组成命名的挂载卷

pvg*_*ijn 49 docker-compose docker-volume

为了跟踪docker-compose使用的卷,我喜欢使用命名卷.这适用于"普通"卷

version: 2
services: 
  example-app:
    volume:
      -named_vol:/dir/in/container/volume
volumes:
  named_vol:
Run Code Online (Sandbox Code Playgroud)

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

version: 2
services: 
  example-app:
    volume:
      -named_homedir:/dir/in/container/volume
volumes:
  named_homedir: /c/Users/
Run Code Online (Sandbox Code Playgroud)

要么

version: 2
services: 
  example-app:
    volume:
      -/c/Users/:/home/dir/in/container/ --name named_homedir
Run Code Online (Sandbox Code Playgroud)

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

kai*_*ser 32

正如您在此GitHub问题中所读到的那样,现在安装命名卷 是一个 ......自1.11或1.12以来.).记录驱动程序特定选项.来自GitHub线程的一些注释:

docker volume create --opt type=none --opt device=<host path> --opt o=bind
Run Code Online (Sandbox Code Playgroud)

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

选项按字面传递给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
Run Code Online (Sandbox Code Playgroud)

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

编辑:评论如下......

  • 原始问题中的撰写文件如何利用这一点? (3认同)
  • 您可以使用`$ {PWD}`来避免使用完整的完整路径,以使您的项目更具可移植性. (2认同)

vil*_*asv 13

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

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

logs-directory:
  driver_opts:
    type: none
    device: ${PWD}/logs
    o: bind
Run Code Online (Sandbox Code Playgroud)


dne*_*hin 7

主机卷与命名卷或匿名卷不同.他们的"名字"是主持人的路径.

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


Sta*_*rov 7

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

我还没有尝试过,但认为它可能对某人有用.

  • 有关在docker-compose.yml中使用local-persist的示例,请参见:https://github.com/CWSpear/local-persist/blob/master/docker-compose.example.yml (2认同)

rmN*_*yro 6

我一直在尝试(几乎)相同的东西,它似乎与以下的东西一起工作:

version: '2'
services: 
  example-app:
    volume:
      -named_vol:/dir/in/container/volume
      -/c/Users/:/dir/in/container/volume
volumes:
  named_vol:
Run Code Online (Sandbox Code Playgroud)

似乎为我工作(我没有深入研究它,只是测试它).

  • 删除这行`-named_vol:/ dir / in / container / volume`不会影响您的配置。它仍然可以工作。您创建了一个名为“ named_vol”的命名卷,然后基本上将其安装,然后在其位置安装了其他东西,因此,现在“ named_vol”不再安装在容器上。为了确认这一点,您可以检查容器并检查是否将名为“ named_vol”的卷安装到了容器上。 (3认同)