Ubuntu18.04环境下Docker容器内ping报Permission denied如何排查
Ubuntu 18.04 Docker容器ping报错socket: Permission denied排查步骤
1 验证容器NET_RAW能力限制
Docker默认会删除容器不必要的内核能力,ping操作依赖NET_RAW能力创建ICMP socket,可先加参数临时放开测试:
- 执行测试命令:
docker run --rm -it --cap-add NET_RAW ubuntu:trusty ping 192.168.1.1
如果命令可正常运行,说明是默认能力限制导致的问题。
2 检查seccomp安全策略拦截
Ubuntu 18.04 官方源安装的Docker默认启用seccomp安全策略,会拦截部分系统调用,对Ubuntu 14.04(trusty)这类旧版本镜像兼容存在异常,可临时关闭策略验证:
- 执行测试命令:
docker run --rm -it --security-opt seccomp=unconfined ubuntu:trusty ping 192.168.1.1
如果执行成功,说明是seccomp策略拦截了ICMP socket创建请求。
3 检查宿主机内核ping权限参数
宿主机内核的ping_group_range参数会限制可创建ICMP socket的用户组范围,即使容器内是root也会受该参数约束:
- 查看当前参数配置:
sysctl net.ipv4.ping_group_range
正常默认输出为net.ipv4.ping_group_range = 0 2147483647,如果范围过小就会触发权限报错。 - 临时调整参数验证:
sudo sysctl -w net.ipv4.ping_group_range="0 2147483647"
调整后再次执行原ping命令测试是否恢复正常。
4 检查Docker daemon全局配置
如果上述临时调整NET_RAW能力可解决问题,但不想每次启动容器都手动加参数,可检查daemon是否有全局禁用NET_RAW的配置:
- 查看daemon配置文件:
cat /etc/docker/daemon.json
如果配置中存在cap-drop项且包含NET_RAW,删除对应配置后重启Docker服务即可:sudo systemctl restart docker
5 验证镜像完整性
老旧的Ubuntu trusty镜像可能存在内部权限配置异常,可拉取官方最新镜像重试:
- 拉取官方镜像:
docker pull ubuntu:trusty
拉取完成后重新执行ping命令测试。
内容的提问来源于stack exchange,提问作者Charles
相关产品推荐
相关产品推荐

