我想知道如何允许“子”(兄弟)停靠容器访问已经挂载的卷的某个子目录。作为一个解释,这是一个简单的设置:
我有以下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构建父映像:
[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命令来创建“子”容器,这些容器实际上是同级容器。数据卷已成功映射:
[parent]$> ls /data/
subdir data1.txt现在,我希望创建一个只能看到subdir目录的同级容器:
[parent]$> docker run --rm --name child -it -v /data/subdir/:/data/ ubuntu这将创建一个同级容器,我成功地“在”容器内,但是新的数据目录是空的。我的假设是,我告诉它使用"/data/“的卷由主机映射到主机上不存在的目录,而不是使用在运行父目录时定义的卷。
[child]$> ls /data/
<nothing>如何允许此映射工作,以便子目录可以在子目录中创建文件,并且父容器可以查看和访问这些文件?子目录不允许查看data1.txt (或子目录上的任何内容)。
发布于 2017-10-25 06:19:47
“兄弟”容器是正确的术语,即使您在其中一个容器中运行docker命令,“父”容器和“子”容器之间没有直接关系。
安装了停靠套接字的容器仍然控制主机上运行的dockerd,因此通过dockerd发送到dockerd的任何路径都将位于主机范围内。
有一些docker命令,在这些命令中,使用容器文件系统可以进行更改。这是docker实用程序本身正在访问本地文件系统的时候。docker build docker cp docker import docker export是docker与本地文件系统交互的示例。
挂载
对第二个容器使用-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您运行的进程需要小心将什么写入到多个容器中的数据,这样数据就不会受到破坏。
https://stackoverflow.com/questions/46924872
复制相似问题