在 Ubuntu 上使用 Docker 挂载目录,常见有三种方式:bind mount(绑定挂载)、volume(数据卷)、tmpfs(内存挂载,不常用)。下面重点讲前两种,最常用。
适合:开发、调试,直接映射宿主机目录
docker run -d \
-p 8080:80 \
-v /home/user/www:/usr/share/nginx/html \
nginx
说明:
/home/user/www:Ubuntu 宿主机目录(必须存在)/usr/share/nginx/html:容器内目录--mount(更规范)docker run -d \
--name nginx \
--mount type=bind,source=/home/user/www,target=/usr/share/nginx/html \
nginx
适合:数据库、持久化数据
docker volume create mydata
docker run -d \
-v mydata:/var/lib/mysql \
mysql
或:
docker run -d \
--mount source=mydata,target=/var/lib/mysql \
mysql
docker volume ls
docker volume inspect mydata
services:
nginx:
image: nginx
volumes:
- ./www:/usr/share/nginx/html
services:
mysql:
image: mysql
volumes:
- dbdata:/var/lib/mysql
volumes:
dbdata:
Ubuntu 默认用非 root 用户,容器可能是 root:
sudo chown -R 1000:1000 /home/user/www
或运行容器时指定用户:
docker run -v /home/user/www:/data --user 1000:1000 image
Ubuntu 默认不需要 :Z 或 :z
bind mount 宿主机目录必须存在,否则 Docker 会自动建为目录(可能不是你要的)
| 方式 | 管理方 | 适合场景 |
|---|---|---|
| bind mount | 用户 | 开发、配置文件 |
| volume | Docker | 数据库、生产 |
| tmpfs | 内存 | 敏感临时数据 |
如果你有具体场景(比如:Nginx、MySQL、Python 项目),我可以给你一份可直接用的命令或 docker-compose.yml。