我创建了两个Docker卷:
docker volume create volume1
docker volume create volume2然后,我使用以下命令创建了一个Docker容器:
docker create -it ... some options ... -v volume1:/var/vcap/store -v volume2:/var/vcap/store2 --privileged myimage /bin/bashDocker容器正确地配置了ssh,因此当我在其中使用ssh时,我会正确地看到/var/vcap/store上挂载的卷。特别是,我认为:
/dev/sda1 on /var/vcap/store type ext4 (rw,relatime,data=ordered)
/dev/sda1 on /var/vcap/store2 type ext4 (rw,relatime,data=ordered)此外,我还看到设备/dev/sda1 1上的其他文件系统:
/dev/sda1 on /etc/resolv.conf type ext4 (rw,relatime,data=ordered)
/dev/sda1 on /etc/hostname type ext4 (rw,relatime,data=ordered)
/dev/sda1 on /etc/hosts type ext4 (rw,relatime,data=ordered)这让我很困惑,因为我不清楚如何将相同的设备安装在不同的文件夹上,成为不同的文件系统。实际上,我验证了,如果我在Linux VM上创建了一个文件,在/var/vcap/store中承载了在Mac上的容器,我在文件夹下面看到了这个文件:
/var/lib/docker/volumes/volume1/_data 创建的文件。如果我在Linux上/var/vcap.xml 2下创建它,我会看到它创建于
/var/lib/docker/volumes/volume2/_data到目前一切尚好。我的问题是,我将容器作为特权创建,因为我希望挂载和卸载这些文件系统。卸载可以正常工作,但是如果我再次尝试挂载卷,我不知道使用哪个设备。如果我使用以下命令:
mount /dev/sda1 /var/vcap/store我在这个文件夹下看到以下内容:
cni containerd docker kubeadm kubelet-plugins log lost+found nfs swap我不知道它是从哪里来的。
问题如下:
发布于 2018-05-21 11:00:47
回答你的问题:
创建停靠卷时,停靠库将创建到的内部符号链接。如果/var/lib/docker/卷在/dev/sda1 1中挂载,则属于/dev/sda1 1的每个卷和已挂载的文件或dir都将显示在同一位置,因为它们实际上是符号链接。
第一个答案也回答了这个问题:它是同一个文件系统,但内部符号链接不同。Docker进行“虚拟”挂载,因此,您只有一个真实的/dev/sda1 1,尽管它出现了几个。这就是为什么不能从容器卸载/dev/sda1 1的原因。只有一个“虚拟”码头卸载。
由docker run或docker-compose up完成的虚拟挂载不可能在容器内完成,因为卷将被引用到主机挂载点(/dev/sda1 1)。最后,我建议控制从发射容器的主机上安装和卸载。如果您需要从容器中挂载和卸载,请与当前/dev/sda1 1相比,请安装和卸载不同的安装点(例如samba dir、nfs存储等),以避免误解。
https://stackoverflow.com/questions/50413405
复制相似问题