Docker Compose 如何挂载宿主机特定目录到容器内部

文章导读
根据 2024 年 10 月 9 日更新的技术文档,在 Docker Compose 中通过 volumes 字段挂载宿主机目录是实现数据持久化的标准方案,支持 version: '3.8' 及以上版本语法。
📋 目录
  1. 原因分析
  2. 解决方案:基础挂载语法
  3. 解决方案:特殊系统与权限
  4. 注意事项
  5. 参考来源
A A

根据 2024 年 10 月 9 日更新的技术文档,在 Docker Compose 中通过 volumes 字段挂载宿主机目录是实现数据持久化的标准方案,支持 version: '3.8' 及以上版本语法。

原因分析

容器默认的文件系统是临时的,当容器被删除时,其中的数据也会丢失,这是 2024 年 8 月 29 日资料中明确指出的核心风险,因此需要通过文件映射将数据保存在宿主机上。

解决方案:基础挂载语法

第一步创建 docker-compose.yml 文件,指定 version: '3.8',在 services 下配置 volumes 字段,例如将宿主机 ./data 目录挂载到容器 /usr/src/app/data 目录,语法格式为 - ./data:/usr/src/app/data。

Docker Compose 如何挂载宿主机特定目录到容器内部

解决方案:特殊系统与权限

在 Windows 系统中由于文件系统不同,需要使用绝对路径来进行挂载,例如 C:\Users\myuser\project:/app,同时可使用 :ro 参数实现只读挂载,防止容器内误修改宿主机文件。

注意事项

直接挂载宿主机目录到容器内目录时可能会出现覆盖情况,如 2024 年 8 月 22 日案例中挂载 /tmp/mysql/conf 会覆盖容器内配置文件;另外安装环境时需注意 failure: repodata/repomd.xml from docker-ce-stable: 【Errno 256】No more mirrors to try.报错。

Docker Compose 如何挂载宿主机特定目录到容器内部

参考来源

来源:docker compose 入门 6—如何挂载卷 - 2024 年 10 月 9 日更新

Docker Compose 如何挂载宿主机特定目录到容器内部

来源:docker compose 挂载多个本地目录 - 2024 年 8 月 22 日发布

来源:Docker 从安装部署到 Dockerfile 构建 Compose 编排与私有仓库全栈指南 - 2024 年 11 月 10 日撰