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

Pav*_*din 53 dotcloud docker

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

use*_*674 157

就像最后的更新一样,这个功能现在在Docker中发布了(尽管自@imiric链接的pull请求以来API已经发生了变化).

只需使用像这样的命令

docker run -v /tmp:/root myImage
Run Code Online (Sandbox Code Playgroud)

为了/tmp/root图像中的主机安装.

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

  • 请注意,这在OS-X(可能还有Windows)上无法正常工作,因为Docker使用从ramdisk运行的VirtualBox映像作为主机,因此该命令在映像中的VB主机中安装(空)文件夹. (10认同)
  • 这肯定不适用于使用boot2docker的OSX. (8认同)
  • 问:这些路径中的任何文件的更改是否都有效? (2认同)
  • @AlixAxel是的,他们会的.目录和文件驻留在安装到容器的主机上.您可以从任一侧编辑文件,并立即查看更改.我使用它将动态内容带入容器而不会膨胀它们. (2认同)
  • 从[1.3]开始,这部分适用于使用boot2docker的OS X(http://blog.docker.com/2014/10/docker-1-3-signed-images-process-injection-security-options-mac-shared-目录/).它适用于/ Users目录中的挂载. (2认同)

小智 11

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

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

但是你可以:

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

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

    debootstrap precise ./bootstrap
    tar -C ./bootstrap -c . | docker import - entend/ubuntubase
    
    Run Code Online (Sandbox Code Playgroud)
  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"
    
    Run Code Online (Sandbox Code Playgroud)

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

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

  • #3的语法似乎已经改变了; `-i`标志需要在图像之前,否则docker run会尝试找到名为`-i`的图像. (2认同)
  • 作为更新,现在通过``docker run``中的``-v``选项,这是docker中的第一类选项.更多信息如下. (2认同)
  • 将接受的答案更改为提及新的`-v`命令行开关的答案可能是个好主意 (2认同)

imi*_*ric 5

只是为了更新这个问题,这将很快在Docker中实现.

此拉取请求实际上已实现此功能,并将很快合并到master.

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