为了跟踪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
这是以任何可能的方式,还是我坚持使用已安装的匿名卷?
答案 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
命令。
编辑:由...评论
${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