如何在主机上为 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自带的local
volume插件即可;以我的回答为例。以上是关于如何在主机上为 docker-compose.yml 中的命名卷设置路径的主要内容,如果未能解决你的问题,请参考以下文章
如何在主机上为 docker-compose.yml 中的命名卷设置路径
如何使用 Yandex Mail for Domain 在 smarterasp.net 主机上为 nopCommerce 配置 SMTP?
docker-compose mysql 容器拒绝访问 wordpress 容器
为啥我不能在我的 XAMPP 上为这个 PHP 网站设置虚拟主机?