如何让docker兄弟容器绑定来自现有卷的子目录

我想知道如何允许“子”(兄弟)泊坞窗容器访问已安装的卷的某个子目录。 作为解释,这是一个简单的设置:

我有以下Dockerfile,它只是将Docker安装在Docker容器中:

FROM ubuntu RUN apt-get update && apt-get install -y curl RUN curl -fsSL https://get.docker.com/ | sh 

我的主机上有以下数据目录

 /home/user/data/ data1.txt subdir/ data2.txt 

构build父图像:

 [host]$> docker build -t parent . 

然后运行父容器:

 [host]$> docker run --rm --name parent -it -v /home/user/data/:/data/ -v /var/run/docker.sock:/var/run/docker.sock parent 

现在我有一个正在运行的容器,并在新的容器“内部”。 由于我有docker套接字绑定到父,我能够运行docker命令来创build“子”容器,这实际上是兄弟容器。 数据量已成功映射:

 [parent]$> ls /data/ subdir data1.txt 

现在我想创build一个只能看到subdir目录的兄弟容器:

 [parent]$> docker run --rm --name child -it -v /data/subdir/:/data/ ubuntu 

这创build了一个兄弟容器,并且我成功地在容器的“内部”,但是新的数据目录是空的。 我的假设是因为我告诉它使用“/ data /”的卷被主机映射到主机上不存在的目录,而不是使用运行父级时定义的卷。

 [child]$> ls /data/ <nothing> 

我可以做些什么来允许这个映射工作,以便孩子可以在子目录中创build文件,父容器可以看到并访问这些文件? 这个孩子不允许看到data1.txt(或其他子目录上面的东西)。

“兄弟”容器是正确的术语,即使您在其中一个容器中运行了docker命令,“父”和“小”容器之间也没有直接关系。

装有dockerd套接字的容器仍然控制在dockerd运行的dockerd ,所以通过API发送到dockerd任何path都将在hosts范围内。

docker命令使用容器文件系统确实改变了事情。 这是docker工具本身访问本地文件系统的时候。 docker build docker cp docker import docker exportdocker与本地文件系统交互的例子。

安装

使用-v /home/user/data/subdir:/data作为第二个容器

 docker run --name parent_volume \ -it --rm -v /home/user/data:/data ubuntu docker run --name child_volume \ -it --rm -v /home/user/data/subdir:/data ubuntu 

你运行的进程需要小心写入到多个容器中的数据,所以数据不会被破坏。