如何在容器中访问新创建的分区

时间:2017-11-09 07:17:18

标签: docker partitioning

我想在容器中使用以下操作访问新创建的分区但是失败。

使用--device=安装磁盘

docker run --privileged -d --device=/dev/vde:/dev/vde centos

使用parted创建新的数据分区

[root@cdba144bc679 ~]# lsblk                                              
lsblk: dm-0: failed to get device path
lsblk: dm-1: failed to get device path
lsblk: dm-0: failed to get device path
lsblk: dm-1: failed to get device path
lsblk: dm-2: failed to get device path
lsblk: dm-3: failed to get device path
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    253:0    0  116G  0 disk 
├─vda1 253:1    0   52G  0 part /etc/hosts
└─vda2 253:2    0   64G  0 part 
vdb    253:16   0  400G  0 disk 
vdc    253:32   0  100G  0 disk 
vdd    253:48   0   10G  0 disk 
vde    253:64   0   10G  0 disk 
vdf    253:80   0   10G  0 disk 
vdg    253:96   0   10G  0 disk 
[root@cdba144bc679 ~]# parted -s /dev/vdg  mklabel gpt mkpart 1 ext4 1 2M

lsblk可以查看:

[root@cdba144bc679 ~]# lsblk 
lsblk: dm-0: failed to get device path
lsblk: dm-1: failed to get device path
lsblk: dm-0: failed to get device path
lsblk: dm-1: failed to get device path
lsblk: dm-2: failed to get device path
lsblk: dm-3: failed to get device path
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    253:0    0  116G  0 disk 
├─vda1 253:1    0   52G  0 part /etc/hosts
└─vda2 253:2    0   64G  0 part 
vdb    253:16   0  400G  0 disk 
vdc    253:32   0  100G  0 disk 
vdd    253:48   0   10G  0 disk 
vde    253:64   0   10G  0 disk 
vdf    253:80   0   10G  0 disk 
vdg    253:96   0   10G  0 disk 
└─vdg1 253:97   0    1M  0 part  <===

ls无法访问,这意味着我无法使用它:

[root@cdba144bc679 ~]# ll /dev/vdg*
brw-rw---- 1 root disk 253, 96 Nov  9 02:31 /dev/vdg

我如何访问它?

1 个答案:

答案 0 :(得分:1)

Docker用于将设备传递到容器的当前方法不允许您在创建容器后动态传递设备。

围绕这个进行了一些讨论:moby/moby #22563是一个合并的PR,但在合并完成后讨论了进一步的增强功能。另外moby/moby #35359是一个开放的问题/功能请求,要求提供可能也适合您用例的设备相关功能。

目前的解决方法是在一个容器中运行fdisk,然后运行一个新容器,该容器通过现在可用/创建的所有块设备:

docker run --privileged -it --rm --device=/dev/vde:/dev/vde fdisk /dev/vde

其次是:

docker run --privileged [...]\
    --device=/dev/vde:/dev/vde \
    --device=/dev/vde1:/dev/vde1 \
    --device=/dev/vde2:/dev/vde2 \
    centos