绑定挂载数据卷
绑定挂载(Bind Mount)将宿主机目录直接挂载到容器,下面介绍使用方法。
基本用法
Bash
# 挂载宿主机目录到容器
docker run -d -v /host/path:/container/path nginx
# 绝对路径
docker run -d -v /home/user/data:/app/data nginx
# 相对路径(相对于当前工作目录)
docker run -d -v ./data:/app/data nginx
常见场景
配置文件挂载
Bash
# 挂载 Nginx 配置
docker run -d \
-v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /etc/nginx/conf.d:/etc/nginx/conf.d:ro \
-p 80:80 \
nginx
# 挂载 MySQL 配置
docker run -d \
-v /etc/mysql/my.cnf:/etc/mysql/my.cnf:ro \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0
代码开发挂载
Bash
# 开发时挂载代码(热更新)
docker run -d \
-v $(pwd):/app \
-p 3000:3000 \
node:18 npm start
# 修改宿主机代码,容器内立即生效
数据持久化
Bash
# MySQL 数据持久化
docker run -d \
-v /data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0
# 删除容器后,/data/mysql 数据仍然存在
绑定挂载 vs 命名卷
| 对比项 | 绑定挂载 | 命名卷 |
|---|---|---|
| 存储位置 | 宿主机指定目录 | Docker 管理目录 |
| 路径控制 | 用户控制 | Docker 控制 |
| 适用场景 | 开发、配置挂载 | 数据持久化、多容器共享 |
| 性能 | 依赖宿主机文件系统 | 优化过,性能更好 |
| 移植性 | 依赖宿主机路径 | 跨平台,移植性强 |
开发环境常用绑定挂载,生产数据持久化推荐命名卷。
自动创建
Bash
# 宿主机目录不存在时会自动创建
docker run -d -v /host/new-dir:/container/dir nginx
# 但新创建目录的属主是 root
# 如果容器以非 root 用户运行,可能需要调整权限
查看挂载
Bash
# 查看容器挂载信息
docker inspect my-nginx | grep -A 10 "Mounts"
# 输出
"Mounts": [
{
"Type": "bind",
"Source": "/host/path",
"Destination": "/container/path",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
]
要点总结
-v /宿主机路径:/容器路径绑定挂载宿主机目录- 配置文件建议
:ro只读挂载,防止容器内误修改 - 开发环境挂载代码实现热更新,修改宿主机立即生效
- 数据持久化挂载宿主机目录,删除容器数据不丢失
- 绑定挂载依赖宿主机路径,移植性不如命名卷
📝 发现内容有误?点击此处直接编辑