如何访问 Docker 容器内的块设备
How to access block device inside a Docker container
我一直在尝试通过绑定挂载从 docker 容器访问主机系统的块存储设备。收到 'Operation not permitted' 错误。
这里有什么我遗漏的吗:
# ls -l /dev/sdb
brw-rw---- 1 root disk 8, 16 Sep 3 00:52 /dev/sdb
#
# dd if=/dev/zero of=/dev/sdb bs=1M
16005+0 records in
16005+0 records out
16782458880 bytes (17 GB) copied, 12.4396 s, 1.3 GB/s
#
#
# docker container run --name c1 -it --mount type=bind,source=/dev/sdb,target=/data centos
/# ls -l /data
brw-rw---- 1 root disk 8, 16 Sep 3 06:52 /data
/#
/#
/# dd if=/dev/zero of=/data bs=1M
dd: failed to open '/data': Operation not permitted
/#
您应该使用 --device
标志将任何类型的设备传递给容器,该文档关于此功能的内容不是最完整的,但它很简单,像 docker container run --name c1 -it --device=/dev/sdb centos
这样的东西应该可以工作很好。
当然你必须将它安装到你的容器中 /data
。
对于硬件设备,您需要为容器提供操作设备的能力,这里有 2 个选项:
选项 1:使用特权
参见Full container capabilities (--privileged):
# docker container run --rm --privileged --name c1 -it --mount type=bind,source=/dev/sdb,target=/data centos
[root@7ab2eaef67cd /]# ls -al /data
brw-rw---- 1 root disk 8, 16 Sep 3 08:13 /data
[root@7ab2eaef67cd /]# dd if=/dev/zero of=/data bs=1 count=1
1+0 records in
1+0 records out
1 byte copied, 0.00710505 s, 0.1 kB/s
[root@7ab2eaef67cd /]# exit
exit
选项 2:使用 --device
参见Add host device to container (--device):
# docker container run --rm --name c1 -it --device=/dev/sdb:/data centos
[root@3a05b15b3b96 /]# ls -al /data
brw-rw---- 1 root disk 8, 16 Sep 3 08:15 /data
[root@3a05b15b3b96 /]# dd if=/dev/zero of=/data bs=1 count=1
1+0 records in
1+0 records out
1 byte copied, 0.00326708 s, 0.3 kB/s
[root@3a05b15b3b96 /]# exit
exit
我一直在尝试通过绑定挂载从 docker 容器访问主机系统的块存储设备。收到 'Operation not permitted' 错误。
这里有什么我遗漏的吗:
# ls -l /dev/sdb
brw-rw---- 1 root disk 8, 16 Sep 3 00:52 /dev/sdb
#
# dd if=/dev/zero of=/dev/sdb bs=1M
16005+0 records in
16005+0 records out
16782458880 bytes (17 GB) copied, 12.4396 s, 1.3 GB/s
#
#
# docker container run --name c1 -it --mount type=bind,source=/dev/sdb,target=/data centos
/# ls -l /data
brw-rw---- 1 root disk 8, 16 Sep 3 06:52 /data
/#
/#
/# dd if=/dev/zero of=/data bs=1M
dd: failed to open '/data': Operation not permitted
/#
您应该使用 --device
标志将任何类型的设备传递给容器,该文档关于此功能的内容不是最完整的,但它很简单,像 docker container run --name c1 -it --device=/dev/sdb centos
这样的东西应该可以工作很好。
当然你必须将它安装到你的容器中 /data
。
对于硬件设备,您需要为容器提供操作设备的能力,这里有 2 个选项:
选项 1:使用特权
参见Full container capabilities (--privileged):
# docker container run --rm --privileged --name c1 -it --mount type=bind,source=/dev/sdb,target=/data centos
[root@7ab2eaef67cd /]# ls -al /data
brw-rw---- 1 root disk 8, 16 Sep 3 08:13 /data
[root@7ab2eaef67cd /]# dd if=/dev/zero of=/data bs=1 count=1
1+0 records in
1+0 records out
1 byte copied, 0.00710505 s, 0.1 kB/s
[root@7ab2eaef67cd /]# exit
exit
选项 2:使用 --device
参见Add host device to container (--device):
# docker container run --rm --name c1 -it --device=/dev/sdb:/data centos
[root@3a05b15b3b96 /]# ls -al /data
brw-rw---- 1 root disk 8, 16 Sep 3 08:15 /data
[root@3a05b15b3b96 /]# dd if=/dev/zero of=/data bs=1 count=1
1+0 records in
1+0 records out
1 byte copied, 0.00326708 s, 0.3 kB/s
[root@3a05b15b3b96 /]# exit
exit