无法拉取Docker镜像报错write operation not permitted求助
报错核心原因
dig命令解析正常是因为当前shell环境使用的DNS服务器为10.86.0.1,而拉取镜像的请求是Docker daemon进程发起的,该进程使用的DNS服务器为10.121.0.1,对应的UDP 53端口DNS请求被系统安全策略拦截,因此返回operation not permitted错误。
常见触发原因包括:
- Docker daemon的DNS配置与系统全局DNS配置不一致
- iptables/ufw防火墙拦截了Docker相关网段发往
10.121.0.1:53的UDP请求 - SELinux/AppArmor安全模块限制了Docker进程的网络访问权限
- 系统DNS策略路由仅允许指定网段访问
10.121.0.1DNS服务器
排查步骤
- 核对Docker daemon的DNS配置
执行以下命令查看Docker内置DNS设置:docker info | grep -i dns
同时对比系统全局DNS配置:cat /etc/resolv.conf
如果Docker配置的DNS确实为10.121.0.1,即可确认存在DNS配置错位问题。 - 排查防火墙拦截规则
查看iptables是否存在拦截UDP 53端口的规则:iptables -L -n | grep -E "(53|DROP|REJECT)"
使用ufw防火墙的系统可执行:ufw status - 排查安全模块限制
CentOS/RHEL系系统可临时关闭SELinux测试:setenforce 0
关闭后重新拉取镜像验证是否恢复正常。Ubuntu系系统可检查AppArmor的Docker配置是否存在异常访问限制。
解决方法
方案1:手动配置Docker daemon的DNS服务器
编辑Docker配置文件/etc/docker/daemon.json,文件不存在则直接新建,添加以下内容:
{ "dns": ["10.86.0.1", "223.5.5.5"] }
保存后重启Docker服务生效:systemctl restart docker
方案2:放行Docker网段的DNS请求
若确认是防火墙拦截导致,添加iptables规则放行Docker虚拟网段的DNS请求:
iptables -I OUTPUT -p udp --dport 53 -s 192.168.1.0/24 -j ACCEPT iptables -I INPUT -p udp --sport 53 -d 192.168.1.0/24 -j ACCEPT
请将示例网段替换为你实际的Docker网桥/宿主机对应网段。
方案3:调整安全模块策略
如果临时关闭SELinux/AppArmor后拉取恢复,可调整对应安全模块的规则,放开Docker进程的DNS访问权限即可。
内容的提问来源于stack exchange,提问作者pxc3110
相关产品推荐
相关产品推荐

