在 Ubuntu 上使用 Docker 挂载卷(Volume / 目录挂载)主要有 三种方式,下面按常见场景给你说明。
把 宿主机目录 直接挂到容器里。
docker run -d \
-v /home/user/data:/app/data \
--name mycontainer \
nginx
说明:
/home/user/data:Ubuntu 上的真实目录/app/data:容器内的目录✅ 适合:
由 Docker 管理,不受宿主机路径影响。
docker volume create mydata
docker run -d \
-v mydata:/app/data \
--name mycontainer \
mysql
docker volume ls
docker volume inspect mydata
✅ 适合:
docker run -d \
-v /home/user/config:/app/config:ro \
nginx
ro = read only
services:
web:
image: nginx
volumes:
- ./data:/usr/share/nginx/html
services:
db:
image: mysql
volumes:
- dbdata:/var/lib/mysql
volumes:
dbdata:
Ubuntu 默认用非 root 用户运行时可能没权限:
sudo chown -R $USER:$USER /home/user/data
或容器中以 root 运行:
docker run -u root ...
Ubuntu 默认 AppArmor,大多数情况无需处理。
| 方式 | 命令示例 | 特点 |
|---|---|---|
| Bind Mount | -v /path:/path |
直观、灵活 |
| Volume | -v name:/path |
安全、易管理 |
| 只读 | :ro |
防篡改 |
如果你有 具体场景(比如 MySQL、Nginx、Python 项目),我可以给你一套完整挂载示例。