如何将目录从主机挂载到 Docker 中的容器?
6 回答
就像最后一次更新一样,这个功能现在在 Docker 中发布(尽管 API 在@imiric 链接的拉取请求之后发生了变化)。
只需使用类似的命令
docker run -v /tmp:/root myImage
为了像在映像中/tmp
那样从主机安装。/root
*更新 - 请参阅下面的答案。这不再是正确答案 *
您无法按设计安装它们,因为 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。
最后一个示例通常用于在容器内运行构建命令之前插入源代码。
这在Docker中是可能的:
将数据挂载到应用程序容器中:
docker run -t -i -rm -volumes-from DATA -name client1 ubuntu bash
适用于 OS X 和 Windows 的技巧
两个连续的安装:我猜这里的很多帖子可能使用了两个 boot2docker。您看不到任何内容的原因是您正在从 boot2docker 挂载一个目录,而不是从您的主机挂载。您基本上需要两个连续的挂载:第一个将目录从主机挂载到系统,第二个将新目录从 boot2docker 挂载到容器,如下所示:
在 boot2docker 上挂载本地系统:
sudo mount -t vboxsf hostfolder /boot2dockerfolder
在 Linux 容器上挂载 boot2docker 文件
docker run -v /boot2dockerfolder:/root/containerfolder -i -t imagename
然后,当您ls
在 containerfolder 中执行操作时,您将看到主机文件夹的内容
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>