如何在主机上为docker-compose.yml中的命名卷设置路径


82

下面的示例创建名为volume的dbdata,并在db服务中对其进行引用:

version: '2'
services:
  db:
    image: mysql
    volumes:
      - dbdata:/var/lib/mysql
volumes:
  dbdata:
    driver: local

(来自https://stackoverflow.com/a/35675553/4291814

我可以看到该卷的默认路径为:

/var/lib/docker/volumes/<project_name>_dbdata

我的问题是如何在主机上为该dbdata卷配置路径?

Answers:


70

随着local成交量的驱动程序来使用任意坐骑的能力; 通过使用绑定安装,您可以完全实现此目的。

为了设置要装入的命名卷/srv/db-data,您docker-compose.yml将如下所示:

version: '2'
services:
  db:
    image: mysql
    volumes:
      - dbdata:/var/lib/mysql
volumes:
  dbdata:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '/srv/db-data'

我尚未使用撰写文件格式的第2版进行过测试,但是https://docs.docker.com/compose/compose-file/compose-versioning/#version-2并不表明它不起作用。

我也没有在Windows上测试过...


3
您可以使用绑定挂载,其语法要比以下简单得多:卷:-./dbdata:/var/lib/mysql。绑定挂载的唯一“问题”是,与命名卷不同,它不会自动将容器内容复制到主机。docs.docker.com/compose/compose-file/#volumes
mikey,

12
OP专门询问了命名卷,而不是如何以最简单的方式使用绑定安装。如果要配置命名卷的路径,则可以通过绑定安装来实现,如上所示。使用命名卷的优点是您可以在docker-compose.yml中简单地重用它们。
Christian Ulbrich

抱歉,克里斯蒂安,没想到这是使用命名卷。我以为这是在介绍如何使用绑定安装。这似乎是正确的解决方案(请参阅:stackoverflow.com/a/45039609/3080207)。
mikey

什么是任意坐骑?它是在docker容器本身还是在主机上的随机路径?谢谢。
Amr Afifi

您可以在主机上使用任意安装,例如。这样,您还可以使用sshfs挂载某些内容并将其绑定挂载到命名卷。
Christian Ulbrich

8

命名卷的位置由docker管理;如果要自己指定位置,则可以“绑定安装”主机目录,也可以使用允许您指定路径的卷插件。

您可以在我最近发布的另一个答案中找到一些详细信息。https://stackoverflow.com/a/36321403/1811501


1
实际上,您只需要使用localdocker本身提供的volume插件即可;请参阅我的答案作为示例。
Christian Ulbrich

0

docker-compose v3.2现在开始,您可以按照以下步骤进行操作:

注意:许多,正如我想的那样,如果version: "3"使用的话,它将使用最新/最新的V3,但不是v3.0,您必须指定至少3.2使用以下配置方法。

https://docs.docker.com/compose/compose-file/#volumes

version: "3.2"
services:
  db:
    image: postgres:latest
    volumes: 
      - type: volume
        source: /opt/db/vols/dbdata
        target: /var/lib/postgresql/data
        volume:
          nocopy: true



volumes:
   dbdata:

注意:

如图所示,必须在顶级卷键下列出命名的卷。


抱歉,如果我不明白您的答案@FreeSoftwareServer,这里的问题是“我们如何将命名卷映射到主机文件夹”?
Dheeraj Kumar

我试图简化答案,也许从您的特定问题开始一个新问题。@Dheeraj Kumar
FreeSoftwareServers

如何dbdata映射到服务db的数量?@FreeSoftwareServers
Nam G VU

源代码行?@NamGVU也许您的特定问题有一个新问题会更好
FreeSoftwareServers
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.