温馨提示×

ubuntu docker怎么挂载目录

小樊
44
2026-09-04 11:38:30
栏目: 智能运维

在 Ubuntu 上使用 Docker 挂载目录,常见有三种方式:bind mount(绑定挂载)volume(数据卷)tmpfs(内存挂载,不常用)。下面重点讲前两种,最常用。


一、bind mount(把宿主机目录挂到容器里)

适合:开发、调试,直接映射宿主机目录

1️⃣ 运行容器时挂载

docker run -d \
  -p 8080:80 \
  -v /home/user/www:/usr/share/nginx/html \
  nginx

说明:

  • /home/user/www:Ubuntu 宿主机目录(必须存在)
  • /usr/share/nginx/html:容器内目录
  • 容器内修改会直接反映到宿主机

2️⃣ 使用 --mount(更规范)

docker run -d \
  --name nginx \
  --mount type=bind,source=/home/user/www,target=/usr/share/nginx/html \
  nginx

二、volume(Docker 管理的卷,推荐生产用)

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

1️⃣ 创建 volume

docker volume create mydata

2️⃣ 挂载 volume

docker run -d \
  -v mydata:/var/lib/mysql \
  mysql

或:

docker run -d \
  --mount source=mydata,target=/var/lib/mysql \
  mysql

查看 volume

docker volume ls
docker volume inspect mydata

三、docker-compose 中挂载(最常用)

bind mount 示例

services:
  nginx:
    image: nginx
    volumes:
      - ./www:/usr/share/nginx/html

volume 示例

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

volumes:
  dbdata:

四、常见坑(Ubuntu 特别注意)

1️⃣ 权限问题

Ubuntu 默认用非 root 用户,容器可能是 root:

sudo chown -R 1000:1000 /home/user/www

或运行容器时指定用户:

docker run -v /home/user/www:/data --user 1000:1000 image

2️⃣ SELinux(Ubuntu 一般没有)

Ubuntu 默认不需要 :Z:z

3️⃣ 目录不存在

bind mount 宿主机目录必须存在,否则 Docker 会自动建为目录(可能不是你要的)


五、快速对比

方式 管理方 适合场景
bind mount 用户 开发、配置文件
volume Docker 数据库、生产
tmpfs 内存 敏感临时数据

如果你有具体场景(比如:Nginx、MySQL、Python 项目),我可以给你一份可直接用的命令或 docker-compose.yml

0