在Docker容器中调用OpenConnect VPN客户端显示TUNSETIFF失败:不允许操作

我在基于Ubuntu的docker容器里面调用openconnect。 它成功地连接到服务器,并提示input密码,但是

Got CONNECT response: HTTP/1.1 200 OK CSTP connected. DPD 30, Keepalive 20 TUNSETIFF failed: Operation not permitted 

我searchTUNSETIFF单词,每个答案都是关于不在sudo中运行的命令,但我已经在容器内的root。 还有什么可以出错?

默认情况下,Docker容器是以一组减less的linuxfunction启动的(请参阅man capabilities )。 减less的集合不包括一些networking相关的function(大概是这样,容器不能嗅探来自主机或其他容器的stream量)。

要启动具有完整networkingfunction的容器,可以使用--cap-add参数明确添加SYS_NET_ADMINfunction,例如:

 docker run -d --cap-add SYS_NET_ADMIN myimage 

或者给容器提供全部的特权,例如:

 docker run -d --privileged myimage 

用–privileged启动容器。 (感谢Adrian Mouat的回答)。