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

mis*_*sha 60 volume docker docker-compose

下面的示例创建dbdata命名卷并在db服务中引用它:

version: '2'
services:
  db:
    image: mysql
    volumes:
      - dbdata:/var/lib/mysql
volumes:
  dbdata:
    driver: local
Run Code Online (Sandbox Code Playgroud)

(来自/sf/answers/2497288741/)

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

/ var/lib/docker/volumes/project_name _dbdata

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

Chr*_*ich 51

使用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'
Run Code Online (Sandbox Code Playgroud)

我没有使用compose文件格式的第2版进行测试,但https://docs.docker.com/compose/compose-file/compose-versioning/#version-2并未表明它不应该工作.

我还没有在Windows上测试它...

  • OP专门询问_named_卷,**不是**如何以最简单的方式使用bind mount.如果要为命名卷配置路径,可以使用绑定装载实现此目的,如上所示.使用命名卷的优点是您可以在docker-compose.yml中重复使用它们. (6认同)
  • 您可以使用比以下语法简单得多的绑定安装:卷:-./dbdata:/var/lib/mysql。绑定挂载的唯一“问题”是,与命名卷不同,它不会自动将容器内容复制到主机。https://docs.docker.com/compose/compose-file/#volumes (3认同)
  • @mikey我在这里发布了一个问题,要求澄清您的第一条评论:/sf/ask/4562385831/不像。如果您能回复,我将不胜感激。谢谢。 (2认同)
  • @thanks_in_advance - 看起来我已经被打败了!tyvm 标记我 (2认同)

tha*_*tah 8

命名卷的位置由docker管理; 如果您想自己指定位置,可以"绑定挂载"主机目录,也可以使用允许您指定路径的卷插件.

你可以在我最近发布的另一个答案中找到一些细节; /sf/answers/2542498241/

  • 实际上你只需要使用 docker 本身提供的“local”卷插件即可;请参阅我的答案作为示例。 (2认同)