温馨提示×

ubuntu docker如何挂载目录

小樊
56
2026-09-07 10:02:33
栏目: 智能运维

在 Ubuntu 上使用 Docker 挂载目录,通常有两种方式:bind mount(绑定挂载) 和 volume(数据卷)。下面分别说明,并给出常见示例。


一、使用 bind mount(直接挂载宿主机目录)

适合:开发环境、需要直接修改宿主机文件

基本命令

docker run -d \
  -v /宿主机/路径:/容器/路径 \
  --name mycontainer \
  镜像名

示例

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

说明:

  • /home/user/data:Ubuntu 上的真实目录(不存在会自动创建)
  • /app/data:容器内的目录
  • 默认权限是读写(rw)

只读挂载

-v /home/user/data:/app/data:ro

二、使用 volume(Docker 数据卷,推荐生产环境)

适合:数据库、持久化数据

1️⃣ 创建 volume

docker volume create mydata

2️⃣ 使用 volume

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

查看 volume 位置:

docker volume inspect mydata

三、使用 docker-compose 挂载目录(常用)

bind mount 示例

version: "3"
services:
  app:
    image: nginx
    volumes:
      - ./data:/usr/share/nginx/html

volume 示例

version: "3"
services:
  db:
    image: mysql
    volumes:
      - dbdata:/var/lib/mysql

volumes:
  dbdata:

四、常见问题

1️⃣ 权限问题(Permission denied)

  • 确保宿主机目录存在
  • 容器用户不是 root 时,可能需要:
chmod -R 777 /home/user/data

或指定用户:

docker run -u 1000:1000 ...

2️⃣ SELinux(Ubuntu 一般不用)

Ubuntu 默认不启用 SELinux,可忽略。

3️⃣ 查看挂载情况

docker inspect 容器名 | grep Mounts -A 20

如果你有具体场景(比如 Nginx / MySQL / Python 项目 / 深度学习),我可以给你更精确的挂载示例。

0 踩