温馨提示×

ubuntu docker如何挂载卷

小樊
41
2026-10-19 00:11:24
栏目: 智能运维

在 Ubuntu 上使用 Docker 挂载卷(Volume / 目录挂载)主要有 三种方式:bind mount(绑定挂载宿主机目录)、volume(Docker 管理卷)、tmpfs(内存卷,不常用)。下面以 Ubuntu 环境 为例说明。


一、Bind Mount(挂载宿主机目录,最常用)

把 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 Volume(Docker 管理的卷)

由 Docker 自动管理,不依赖宿主机具体路径。

1️⃣ 创建 volume

docker volume create mydata

2️⃣ 使用 volume

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


四、Docker Compose 中挂载卷

bind mount

services:
  nginx:
    image: nginx
    volumes:
      - /home/ubuntu/html:/usr/share/nginx/html

volume

services:
  mysql:
    image: mysql
    volumes:
      - dbdata:/var/lib/mysql

volumes:
  dbdata:

五、常见问题

1️⃣ 权限问题

Ubuntu 上常见:

permission denied

解决:

chmod -R 777 /home/ubuntu/html
# 或指定用户
chown -R 1000:1000 /home/ubuntu/html

2️⃣ SELinux(Ubuntu 一般没有)

Ubuntu 默认不用 SELinux

3️⃣ 查看挂载情况

docker inspect 容器名 | grep Mounts -A 20

六、总结对照表

类型 命令示例 用途
bind mount -v /path:/container 开发、配置
volume -v name:/container 数据持久化
tmpfs --tmpfs /tmp 临时内存

如果你有 具体场景(如 Nginx / MySQL / Python 项目 / 群晖 / 服务器),我可以给你 完整可直接用的命令或 compose 文件。

0 踩