在父级系统中将目录挂载到Docker中的容器

时间:2013-03-28 22:17:12

标签: dotcloud docker

如何将目录从父系统挂载到Docker中的容器?

6 个答案:

答案 0 :(得分:157)

正如最后更新一样,此功能现在已在Docker中发布(尽管自@imiric链接的pull请求后API已更改)。

只需使用

之类的命令即可
docker run -v /tmp:/root myImage

以便在主机内挂载/tmp /root作为{{1}}。

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

答案 1 :(得分:11)

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

您无法按设计安装它们,因为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。

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

答案 2 :(得分:5)

只是为了更新这个问题,很快就可以在Docker中实现。

This pull request实际上已实现此功能,很快就会合并为主。

如果您安装this fork,则可立即使用。

答案 3 :(得分:4)

Docker中可以使用 IS

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

docker run -t -i -rm -volumes-from DATA -name client1 ubuntu bash

答案 4 :(得分:4)

OS X和Windows的技巧

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

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

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

    docker run -v /boot2dockerfolder:/root/containerfolder -i -t imagename
    
  3. 然后当您在容器文件夹中执行ls时,您将看到主机文件夹的内容

答案 5 :(得分: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

P.S.:容器是一个正在运行的镜像。

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>