在Docker容器中挂载主机目录的方法

 更新时间:2025年06月24日 11:24:33   作者:1010n111  
在使用Docker时,有时需要将主机上的目录挂载到容器中,以便在主机和容器之间共享数据,使主机上的更新能实时反映到容器中,但不同的操作系统和Docker版本在挂载目录时可能会有不同的方法和注意事项,本文给大家讲解了在Docker容器中挂载主机目录的方法

在Docker容器中挂载主机目录的方法

技术背景

在使用Docker时,有时需要将主机上的目录挂载到容器中,以便在主机和容器之间共享数据,使主机上的更新能实时反映到容器中。但不同的操作系统和Docker版本在挂载目录时可能会有不同的方法和注意事项。

实现步骤

使用ADD命令(不推荐用于实时更新场景)

可以在Dockerfile中使用ADD命令将主机目录复制到容器中,但这种方式在构建容器后,主机目录的更改不会反映到容器中。

ADD . /path/inside/docker/container

使用-v选项(适用于大多数场景)

在运行容器时使用-v选项可以将主机目录挂载到容器中。以下是不同操作系统的示例:

  • Linux/Mac
docker run -t -i -v <host_dir>:<container_dir>  ubuntu /bin/bash

例如,将主机的/tmp目录挂载到容器的/tmp目录:

docker run -t -i -v /tmp:/tmp ubuntu /bin/bash
  • Windows 10
docker run -it -p 12001:80 -v c:\Users\C\Desktop\dockerStorage:/root/sketches

注意要确保主机驱动器已共享。也可以使用以下格式:

docker run -it -p 12001:80 -v //c/Users/C/Desktop/dockerStorage:/root/sketches <your-image-here> /bin/bash

使用--mount选项(Docker 17.06及以上版本)

--mount选项的语法更详细,键值对的顺序不重要,且值更容易理解。

docker run -it --mount src="$(pwd)",target=/test_container,type=bind k3_s3

如果挂载参数没有空格,也可以使用反引号:

docker run -it --mount src=`pwd`,target=/test_container,type=bind k3_s3

对于使用boot2docker或docker-machine的情况

如果在Mac上使用boot2docker,可能需要进行两次挂载:

  1. 将主机目录挂载到boot2docker
sudo mount -t vboxsf hostfolder /boot2dockerfolder
  1. boot2docker目录挂载到容器:
docker run -v /boot2dockerfolder:/root/containerfolder -i -t imagename

使用docker-compose

docker-compose.yaml文件中也可以进行目录挂载:

version: '2'
services:
  cms:
    image: <IMAGE>:<TAG>
    ports:
      - <LOCAL_PORT>:<CONTAINER_PORT>
    volumes:
      - <LOCAL_PATH>:<CONTAINER_PATH>

例如:

version: '2'
services:
  cms:
    image: ghost-cms:latest
    ports:
      - 8080:8080
    volumes:
      - /volume-to-mount:/mnt

然后运行:

docker-compose -f docker-compose.yaml up -d

核心代码

以下是一些常见的挂载命令示例:

# 使用 -v 选项挂载
docker run -t -i -v /tmp:/tmp ubuntu /bin/bash

# 使用 --mount 选项挂载
docker run -it --mount src="$(pwd)",target=/test_container,type=bind k3_s3

# 在 docker-compose.yaml 中挂载
version: '2'
services:
  app:
    image: your-image:tag
    volumes:
      - ./host-dir:/container-dir

最佳实践

  • 使用绝对路径:在挂载时尽量使用绝对路径,避免使用相对路径,以确保挂载的准确性。
  • 权限管理:要注意挂载目录的权限问题,确保容器内的进程有足够的权限访问挂载的目录。
  • 开发环境使用:在开发环境中,使用目录挂载可以方便地进行代码调试和更新,避免频繁重建容器。

常见问题

  1. 在Mac上使用boot2docker挂载后看不到内容:可能是因为挂载的是boot2docker的目录而不是主机目录,需要进行两次挂载。
  2. Windows上挂载失败:要确保主机驱动器已共享,并且使用正确的路径格式(如使用双斜杠)。
  3. 无法在容器中更新文件:检查挂载目录的权限,确保容器内的进程有读写权限。
  4. 挂载的目录为空:可能是路径错误或Docker配置问题,检查路径是否正确,以及是否需要在Docker设置中共享驱动器。

以上就是在Docker容器中挂载主机目录的方法的详细内容,更多关于Docker挂载主机目录的资料请关注脚本之家其它相关文章!

相关文章

  • 在Ubuntu中安装Docker和docker的使用方式

    在Ubuntu中安装Docker和docker的使用方式

    这篇文章主要介绍了在Ubuntu中安装Docker和docker的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • docker build上下文的实现示例

    docker build上下文的实现示例

    Docker build上下文是构建Docker镜像时传递给Docker引擎的所有文件和目录的集合,可以提高构建效率,避免无用文件的传输,同时确保镜像构建过程的顺利进行,感兴趣的可以了解一下
    2025-09-09
  • 手动构建自己的docker容器镜像实战

    手动构建自己的docker容器镜像实战

    这篇文章主要介绍了如何手动构建自己的镜像并上传到镜像仓库中,文中有详细的代码实例,需要的朋友可以参考阅读
    2023-04-04
  • docker compose 使用教程

    docker compose 使用教程

    这篇文章主要介绍了docker compose 使用教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • docker安装RabbitMQ及安装延迟插件的详细过程

    docker安装RabbitMQ及安装延迟插件的详细过程

    MQ(message queue)字面意思上来说消息队列,是一种跨进程的通信机制,用于上下游传递消息,本文给大家详细介绍docker安装RabbitMQ及安装延迟插件的过程,感兴趣的朋友一起看看吧
    2022-06-06
  • docker安装RabbitMq添加用户实现方式

    docker安装RabbitMq添加用户实现方式

    这篇文章主要介绍了docker安装RabbitMq添加用户实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 如何通过Dockerfile 创建 kali-novnc

    如何通过Dockerfile 创建 kali-novnc

    这篇文章主要介绍了如何通过Dockerfile 创建 kali-novnc,在Dockerfile所在目录运行相关命令操作即可完成,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • 在docker中的mysql容器内执行命令与执行SQL文件方式

    在docker中的mysql容器内执行命令与执行SQL文件方式

    文章介绍了如何通过Docker进入MySQL容器执行SQL文件,并总结了MySQL清空表数据的三种方法:TRUNCATE、DROP和DELETE,每种方法都有其适用场景和特点
    2025-01-01
  • mysql8.4.0实现主从复制部署

    mysql8.4.0实现主从复制部署

    主从复制是 MySQL 中一种用于实现数据冗余、提高可用性和性能的重要机制,本文主要介绍了mysql8.4.0实现主从复制部署,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • 三分钟完成 ubuntu16.04初始化,Java,maven,docker环境的部署问题

    三分钟完成 ubuntu16.04初始化,Java,maven,docker环境的部署问题

    这篇文章主要介绍了三分钟完成 ubuntu16.04初始化,Java,maven,docker环境的部署问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-11-11

最新评论