如何将目录从父系统挂载到Docker中的容器?
答案 0 :(得分:157)
正如最后更新一样,此功能现在已在Docker中发布(尽管自@imiric链接的pull请求后API已更改)。
只需使用
之类的命令即可docker run -v /tmp:/root myImage
以便在主机内挂载/tmp
/root
作为{{1}}。
答案 1 :(得分:11)
*更新 - 请参阅下面的答案。这不再是正确的答案*
您无法按设计安装它们,因为Docker无法再保证可重复的执行环境。
但是你可以:
导入主机的根文件系统并从中创建新图像:
tar -C / -c . | docker import - entend/custombase
导入引导根文件系统,例如运行'debootstrap'的结果。 (请注意,这就是官方“基础”图像的创建方式,因此您最好只运行“docker pull base”)
debootstrap precise ./bootstrap
tar -C ./bootstrap -c . | docker import - entend/ubuntubase
运行本地目录时将其内容注入容器中。
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)
答案 3 :(得分:4)
Docker中可以使用 IS :
将数据挂载到应用程序容器中:
docker run -t -i -rm -volumes-from DATA -name client1 ubuntu bash
答案 4 :(得分:4)
两个连续的坐骑:我想这里的很多帖子可能都是使用两个boot2docker' s。您没有看到任何内容的原因是因为您正在从boot2docker安装目录,而不是从主机安装目录。您基本上需要两个连续的挂载:第一个是从主机到系统安装目录,第二个是将新目录从boot2docker安装到容器中,如下所示:
在boot2docker上挂载本地系统:
sudo mount -t vboxsf hostfolder /boot2dockerfolder
在Linux容器上挂载boot2docker文件
docker run -v /boot2dockerfolder:/root/containerfolder -i -t imagename
然后当您在容器文件夹中执行ls
时,您将看到主机文件夹的内容
答案 5 :(得分:0)
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>