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

Posted

技术标签:

【中文标题】如何在主机上为 docker-compose.yml 中的命名卷设置路径【英文标题】:How to set a path on host for a named volume in docker-compose.yml 【发布时间】:2016-07-23 01:44:31 【问题描述】:

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

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

(来自https://***.com/a/35675553/4291814)

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

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

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

【问题讨论】:

查看我对更新方法的回答 --> ***.com/a/61743638/5079799 【参考方案1】:

local 卷驱动可以使用任意挂载;通过使用bind mount,您可以完全实现这一点。

要设置挂载到/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'

我没有用compose文件格式的第2版测试过,但是https://docs.docker.com/compose/compose-file/compose-versioning/#version-2并没有说明,应该不行。

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

【讨论】:

您可以使用比这更简单的语法绑定挂载:volumes: - ./dbdata:/var/lib/mysql。绑定挂载的唯一“问题”是它不会自动将容器内容复制到主机,这与命名卷不同。 docs.docker.com/compose/compose-file/#volumes OP 专门询问了命名卷,不是如何以最简单的方式使用绑定挂载。如果要为命名卷配置路径,可以通过绑定挂载来实现,如上所示。使用命名卷的好处是您可以在 docker-compose.yml 中简单地重复使用它们。 @mikey 我在这里发布了一个问题,要求澄清您的第一条评论:***.com/questions/65176940/…。如果您能回复,将不胜感激。谢谢。 @thanks_in_advance - 看起来我被打败了! tyvm 用于标记我 @mikey 随时通过 cmets 加入讨论。【参考方案2】:

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

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

【讨论】:

其实你只需要使用docker自带的localvolume插件即可;以我的回答为例。

以上是关于如何在主机上为 docker-compose.yml 中的命名卷设置路径的主要内容,如果未能解决你的问题,请参考以下文章

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

如何使用 Yandex Mail for Domain 在 smarterasp.net 主机上为 nopCommerce 配置 SMTP?

docker-compose mysql 容器拒绝访问 wordpress 容器

为啥我不能在我的 XAMPP 上为这个 PHP 网站设置虚拟主机?

如何使用 LLVM 在 Windows 上为 ARM 编译 C++ 程序?

使用 apache 端口 8080 在 xampp 上为 zendframework 设置虚拟主机