You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法拉取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服务器

排查步骤

  1. 核对Docker daemon的DNS配置
    执行以下命令查看Docker内置DNS设置:
    docker info | grep -i dns
    同时对比系统全局DNS配置:
    cat /etc/resolv.conf
    如果Docker配置的DNS确实为10.121.0.1,即可确认存在DNS配置错位问题。
  2. 排查防火墙拦截规则
    查看iptables是否存在拦截UDP 53端口的规则:
    iptables -L -n | grep -E "(53|DROP|REJECT)"
    使用ufw防火墙的系统可执行:
    ufw status
  3. 排查安全模块限制
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 01:27:08