我创建了两个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/bash
Docker容器已正确配置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上看到了其他文件系统:
/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)
这让我很困惑,因为我不清楚如何将相同的设备安装在不同的文件夹上并且是不同的文件系统。事实上,我验证了如果我在Mac上托管容器的Linux VM上的/ var / vcap / store中创建了一个文件,我会在文件夹下看到:
/var/lib/docker/volumes/volume1/_data
创建的文件。如果我在Linux VM上的/ var / vcap / store2下创建它,我会看到它在
下创建/var/lib/docker/volumes/volume2/_data
到目前为止一切顺利。我的问题是我创建了容器特权,因为我想挂载和卸载这些文件系统。卸载工作正常,但如果我再次尝试安装卷,我不知道使用哪个设备。如果我使用命令:
mount /dev/sda1 /var/vcap/store
我在此文件夹下看到以下内容:
cni containerd docker kubeadm kubelet-plugins log lost+found nfs swap
我不知道它来自哪里。
问题是:
答案 0 :(得分:1)
回答你的问题:
- 当我在Docker上安装卷时,它是如何映射到/ dev / sda1的 设备?
醇>
创建泊坞窗卷时, docker会为/ var / lib / docker / volumes / volume_name 创建内部符号链接。 如果在/ dev / sda1中安装了/ var / lib / docker / volumes,则每个卷和已安装的文件或属于/ dev / sda1的目录将显示在同一点上,因为实际上它们是符号链接。
- 对于不同的设备,如何才能使用相同的设备 文件系统?
醇>
它还回答了1号回答:它是相同的文件系统,但是内部符号链接不同。 Docker确实"虚拟" mount,所以,你只有一个真正的/ dev / sda1,尽管看起来有几个。这就是为什么你不能从容器中卸载/ dev / sda1的原因。只有一个"虚拟" docker unmount。
- 假设我在安装的特权模式下使用Docker 我应该使用命令再次安装文件系统 卸载?
醇>
由docker run
或docker-compose up
完成的虚拟安装不可能在容器内完成,因为卷将被引用到主机安装点(/ dev / sda1)。
最后,我建议控制从启动容器的主机安装和卸载。如果您需要从容器装载和卸载,请安装和卸载不同的安装点(例如samba目录,nfs存储等),而不是当前的/ dev / sda1,以避免误解。