温馨提示×

Ubuntu Docker卷怎么挂载

小樊
37
2026-10-07 06:15:59
栏目: 智能运维

在 Ubuntu 上使用 Docker 挂载卷(Volume / 目录挂载)主要有 三种方式,下面按常见场景给你说明。


一、绑定挂载(Bind Mount,最常用)

把 宿主机目录 直接挂到容器里。

示例

docker run -d \
  -v /home/user/data:/app/data \
  --name mycontainer \
  nginx

说明:

  • /home/user/data:Ubuntu 上的真实目录
  • /app/data:容器内的目录
  • 如果宿主机目录不存在,Docker 会自动创建

✅ 适合:

  • 配置文件
  • 日志
  • 开发环境

二、使用 Docker 管理的 Volume(推荐用于数据持久化)

由 Docker 管理,不受宿主机路径影响。

1️⃣ 创建 volume

docker volume create mydata

2️⃣ 使用 volume

docker run -d \
  -v mydata:/app/data \
  --name mycontainer \
  mysql

查看 volume

docker volume ls
docker volume inspect mydata

✅ 适合:

  • 数据库(MySQL、Postgres)
  • 不想关心宿主机路径的情况

三、只读挂载(防止容器修改数据)

docker run -d \
  -v /home/user/config:/app/config:ro \
  nginx

ro = read only


四、Docker Compose 中挂载(Ubuntu 同样适用)

使用 bind mount

services:
  web:
    image: nginx
    volumes:
      - ./data:/usr/share/nginx/html

使用 volume

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

volumes:
  dbdata:

五、常见问题(Ubuntu 特有)

1️⃣ 权限问题

Ubuntu 默认用非 root 用户运行时可能没权限:

sudo chown -R $USER:$USER /home/user/data

或容器中以 root 运行:

docker run -u root ...

2️⃣ SELinux / AppArmor(一般不影响)

Ubuntu 默认 AppArmor,大多数情况无需处理。


六、快速对比

方式 命令示例 特点
Bind Mount -v /path:/path 直观、灵活
Volume -v name:/path 安全、易管理
只读 :ro 防篡改

如果你有 具体场景(比如 MySQL、Nginx、Python 项目),我可以给你一套完整挂载示例。

0 踩