在 Ubuntu 上使用 Docker 挂载卷(Volume / 目录挂载)主要有 三种方式:bind mount(绑定挂载宿主机目录)、volume(Docker 管理卷)、tmpfs(内存卷,不常用)。下面以 Ubuntu 环境 为例说明。
把 Ubuntu 上的某个目录直接挂到容器里。
docker run -d \
--name mynginx \
-p 8080:80 \
-v /home/ubuntu/html:/usr/share/nginx/html \
nginx
说明:
/home/ubuntu/html:Ubuntu 宿主机目录/usr/share/nginx/html:容器内目录✅ 适合:
由 Docker 自动管理,不依赖宿主机具体路径。
docker volume create mydata
docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-v mydata:/var/lib/mysql \
mysql
查看 volume 位置:
docker volume inspect mydata
✅ 适合:
docker run -d \
-v /home/ubuntu/config:/app/config:ro \
myimage
:ro 表示 read-only
services:
nginx:
image: nginx
volumes:
- /home/ubuntu/html:/usr/share/nginx/html
services:
mysql:
image: mysql
volumes:
- dbdata:/var/lib/mysql
volumes:
dbdata:
Ubuntu 上常见:
permission denied
解决:
chmod -R 777 /home/ubuntu/html
# 或指定用户
chown -R 1000:1000 /home/ubuntu/html
Ubuntu 默认不用 SELinux
docker inspect 容器名 | grep Mounts -A 20
| 类型 | 命令示例 | 用途 |
|---|---|---|
| bind mount | -v /path:/container |
开发、配置 |
| volume | -v name:/container |
数据持久化 |
| tmpfs | --tmpfs /tmp |
临时内存 |
如果你有 具体场景(如 Nginx / MySQL / Python 项目 / 群晖 / 服务器),我可以给你 完整可直接用的命令或 compose 文件。