我在基于ubuntu的docker容器中调用openconnect。它成功连接到服务器并提示输入我的密码,但随后
Got CONNECT response: HTTP/1.1 200 OK
CSTP connected. DPD 30, Keepalive 20
TUNSETIFF failed: Operation not permitted
我搜索TUNSETIFF字,每个答案都是关于sudo中没有运行的命令,但我已经在容器内部进行了root操作。还有什么可能出错?
答案 0 :(得分:23)
默认情况下,Docker容器以一组减少的linux功能启动(参见man capabilities
)。减少的集合不包括一些与网络相关的功能(可能是因为容器无法嗅探来自主机或其他容器的流量)。
要启动具有完整网络功能的容器,请使用SYS_NET_ADMIN
参数显式添加--cap-add
功能,例如:
docker run -d --cap-add SYS_NET_ADMIN myimage
或者使用--privileged
为容器提供完整的权限集,例如:
docker run -d --privileged myimage
答案 1 :(得分:0)
使用--privileged启动容器。 (感谢Adrian Mouat的回答)。
答案 2 :(得分:0)
通过
运行容器特权 docker run -d --privileged myimage
正如Adrian在添加NET_ADMIN
功能时指出或运行它并通过隧道设备,例如:
docker run -d --cap-add NET_ADMIN --device /dev/net/tun myimage