56

如何将目录从主机挂载到 Docker 中的容器?

4

6 回答 6

159

就像最后一次更新一样,这个功能现在在 Docker 中发布(尽管 API 在@imiric 链接的拉取请求之后发生了变化)。

只需使用类似的命令

docker run -v /tmp:/root myImage

为了像在映像中/tmp那样从主机安装。/root

来源:https ://docs.docker.com/engine/userguide/dockervolumes/

于 2013-09-27T19:47:31.740 回答
13

*更新 - 请参阅下面的答案。这不再是正确答案 *

您无法按设计安装它们,因为 Docker 不再保证可重复的执行环境。

但是,您可以:

  1. 导入主机的根文件系统并从中创建一个新映像:

    tar -C / -c . | docker import - entend/custombase
    
  2. 导入引导根文件系统,例如运行“debootstrap”的结果。(请注意,这是官方“基础”映像的创建方式,因此您最好只运行“docker pull base”)

    debootstrap precise ./bootstrap
    tar -C ./bootstrap -c . | docker import - entend/ubuntubase
    
  3. 运行时将本地目录的内容注入到容器中。

    IMAGE=base; SRC=./stuff; DST=/tmp/stuff; CMD="echo hello world"; tar -C $src -c . | docker run $IMAGE -i /bin/sh -c "tar -C $DST -x; $CMD"
    

    这将从 $IMAGE 运行一个容器,将主机目录 $SRC 复制到容器目录 $DST 中,然后运行命令 $CMD。

    最后一个示例通常用于在容器内运行构建命令之前插入源代码。

于 2013-03-28T22:42:46.153 回答
5

只是为了更新这个问题,这将很快在 Docker 中成为可能。

这个pull request其实已经实现了这个特性,很快会合并到master。

如果你安装了这个 fork,你现在就可以使用它。

于 2013-06-24T20:34:53.257 回答
4

这在Docker中是可能的:

将数据挂载到应用程序容器中:

docker run -t -i -rm -volumes-from DATA -name client1 ubuntu bash
于 2014-03-26T22:04:11.673 回答
4

适用于 OS X 和 Windows 的技巧

两个连续的安装:我猜这里的很多帖子可能使用了两个 boot2docker。您看不到任何内容的原因是您正在从 boot2docker 挂载一个目录,而不是从您的主机挂载。您基本上需要两个连续的挂载:第一个将目录从主机挂载到系统,第二个将新目录从 boot2docker 挂载到容器,如下所示:

  1. 在 boot2docker 上挂载本地系统:

     sudo mount -t vboxsf hostfolder /boot2dockerfolder
    
  2. 在 Linux 容器上挂载 boot2docker 文件

     docker run -v /boot2dockerfolder:/root/containerfolder -i -t imagename
    

然后,当您ls在 containerfolder 中执行操作时,您将看到主机文件夹的内容

于 2014-12-06T09:14:12.687 回答
0

2021 年 7 月更新

Dockerfile 解决方案

添加以下行,Dockerfile将数据从主机复制到创建的映像(容器)。

# Other lines of Dockerfile
COPY <relative-or-absolute-path-of-the-directory-in-host-machine> <relative-or-absolute-path-of-the-directory-in-container>
# Example:
# COPY ./redis/data/:/db_data

PS:容器是一个正在运行的图像。

Docker-compose 解决方案

卷可以在 docker-compose 文件中以各种方式定义。其中之一是将主机的目录地址挂载到容器中。(就像我们在 dockerfile 解决方案中所拥有的一样)作为您服务的一部分:

volumes:
    - <relative-or-absolute-path-of-the-directory-in-host-machine>:<relative-or-absolute-path-of-the-directory-in-container>
于 2021-06-30T23:12:56.180 回答