因为有业务需求,需要在docker的容器下连接iscsi磁盘。

  • 部署docker镜像,安装open-iscsi
    test@testpc$ docker pull ubuntu:14.04
    test@testpc$ docker run ubuntu:14.04 apt-get install -y open-iscsi
    
  • 进入容器,运行iscsiadm
    root@aaaa# iscsiadm -m discovery -t st -p 192.168.1.10
    iscsiadm: can not connect to iSCSI daemon (111)!
    iscsiadm: can not connect to iSCSI daemon (111)!
    iscsiadm: Cann perform discovery. connect to iSCSI daemon (111)!
    

初步排查原因,可能是因为找不到iscsi的驱动。该装装,该删删,结果依旧不行。

有没有可能是docker本身的默认配置或策略问题?想到这,果然在某个docker官方文档中找到了一个参数privileged:

test@testpc$ docker help run 
...
--privileged=false  Give extended privileges to this container
...

docker容器内的root,默认情况下只是外部的一个普通用户权限,并不拥有root权限。只有使用了该参数,容器内的root才拥有真正的root权限。

尝试一下:

  • 使用privileged创建一个新的容器:
    test@testpc$ docker run --privileged --name test -t -i ubuntu:14.04 /bin/bash
    
  • 进入容器,运行iscsiadm
    root@aaaa# iscsiadm -m discovery -t st -p 192.168.1.10
    192.168.1.10:3260,1 iqn.1997-05.com.test:iscsi1
    

完美解决!END