银河麒麟V10上Docker启动失败主因是runc二进制冲突及iptables依赖缺失:需用/usr/bin/runc覆盖/usr/local/bin/runc,启用iptables服务并加载bridge、br_netfilter模块,配置daemon.json启用iptables,最后确保用户属docker组且dbus正常。

银河麒麟OS上Docker服务启动失败时,执行sudo systemctl start docker后报错退出,日志中出现permission denied、iptables failed或failed to create NAT chain DOCKER等关键提示,说明底层依赖或配置已发生冲突。
检查并修复runc二进制冲突
银河麒麟V10预装了系统级runc(位于/usr/local/bin/runc),它会覆盖Docker自带的runc(位于/usr/bin/runc),导致容器进程无法启动。
第一步:确认冲突存在
运行which runc,若输出为/usr/local/bin/runc,则证实冲突。
第二步:用Docker提供的runc覆盖系统runcsudo cp /usr/bin/runc /usr/local/bin/runc
第三步:验证替换结果sudo runc --version应显示与docker version中runc版本一致(如runc version 1.1.12)。【不执行此步可能导致后续所有容器启动均报permission denied】
第四步:重启服务sudo systemctl daemon-reload && sudo systemctl restart docker
启用iptables并加载必要内核模块
桌面版银河麒麟默认未启用iptables服务,且br_netfilter模块常处于未加载状态,这会导致Docker网络初始化失败。
方法一:一键启用iptables服务sudo systemctl enable --now iptables
Docker Hub (hub.docker.com)。此技能适用于所有 Docker Hub 操作,包括读取、创建、更新和删除数据。只要任务涉及 Docker Hub,就使用此技能。
方法二:手动加载内核模块sudo modprobe bridge && sudo modprobe br_netfilter
为确保开机生效,将两行写入/etc/modules-load.d/docker.conf文件。
方法三:强制Docker接管iptables规则
编辑/etc/docker/daemon.json(若不存在则新建),写入:{"iptables": true}
保存后执行sudo systemctl restart docker。
验证Docker守护进程通信是否正常
即使服务显示active,也可能因socket权限或dbus异常导致客户端无法通信。
运行docker info,若报错Cannot connect to the Docker daemon,立即检查以下三项:
确认当前用户已加入docker组:sudo usermod -aG docker $USER;【必须重新登录终端或执行newgrp docker才生效】
检查dbus服务状态:systemctl --user status dbus,若非running,执行systemctl --user start dbus。
测试socket直连:sudo docker -H unix:///var/run/docker.sock info | grep 'Server Version',能输出版本即证明守护进程本身可响应。










