首页  

docker容器内访问宿主机文件     所属分类 docker 浏览量 19
容器里不能直接访问宿主机文件系统,
必须在启动容器时显式挂载宿主机的目录/文件到容器内,或用 docker cp 临时复制。
常用的几种做法(推荐度从上到下)

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

把宿主机指定目录 / 文件映射到容器内路径,双向实时同步。
1)基本语法(-v 简写)
# 目录挂载(宿主机目录 → 容器内目录)
docker run -v /宿主机/绝对路径:/容器内路径 -it 镜像名

# 单个文件挂载(如配置文件)
docker run -v /宿主机/xxx.conf:/容器内/xxx.conf -it 镜像名


2)更规范的 --mount 写法(推荐生产)

docker run --mount type=bind,source=/宿主机/路径,target=/容器内路径  -it 镜像名

3)只读挂载(安全,防止容器改宿主机文件)

# :ro 只读
docker run -v /host/path:/container/path:ro -it 镜像名
示例
宿主机有 /data 目录,要在容器内 /mnt/hostdata 访问:

docker run -v /data:/mnt/hostdata -it ubuntu

# 进入容器后
ls /mnt/hostdata   # 看到宿主机 /data 下的文件



二、Docker Compose 中挂载(日常开发最常用)


version: "3"
services:
  app:
    image: ubuntu
    volumes:
      # 目录挂载
      - /宿主机/路径:/容器内路径
      # 只读文件挂载
      - /宿主机/config.ini:/app/config.ini:ro
启动:docker-compose up -d



三、临时复制:docker cp(一次性,不实时同步)

适合少量文件、临时用,不挂载、不同步。
宿主机 → 容器
docker cp /host/file 容器ID:/container/path
容器 → 宿主机

docker cp 容器ID:/container/path /host/file



四、数据卷(Volume,Docker 管理,不绑定固定路径)
由 Docker 管理,宿主机路径不固定,适合容器持久化数据、多容器共享。

# 创建卷
docker volume create myvol

# 挂载到容器
docker run -v myvol:/container/path -it 镜像名
宿主机实际路径:docker volume inspect myvol 查看 Mountpoint。


五、特权模式(不推荐,安全风险极高)
用 --privileged 可在容器内挂载宿主机磁盘,完全突破隔离,生产绝对禁用。
# 危险!仅本地测试
docker run --privileged -it alpine
# 容器内(需知道宿主机分区,如 /dev/sda1)
mkdir /host
mount /dev/sda1 /host
ls /host  # 看到宿主机根文件系统


六、常见问题:权限不足
容器内用户(如 nginx、www-data)可能没宿主机目录权限:
宿主机给目录加其他用户可读:
chmod -R o+r /宿主机/路径
启动容器时指定与宿主机同 UID/GID(推荐):
docker run -u $(id -u):$(id -g) -v /host/path:/container/path -it 镜像名

七 总结
开发 / 配置共享:
用 bind mount(-v /host/path:/container/path),加 :ro 更安全。

一次性文件:用 docker cp。
持久化数据:用 Docker Volume。
特权模式:永远不要在生产用。

上一篇     下一篇
Docker 网络 面试题及答案

hutool 数据源创建

JDBC流式查询

Java应用镜像不同架构的区别

Docker Compose Java 应用 command 多行参数示例

Docker Compose 常用排查命令