安装https://www.cnblogs.com/sowler/p/18228732这个步骤安装,启动失败
sudo systemctl start docker
查看状态
leoliu@bogon:~$ sudo systemctl status docker
× docker.service - Docker Application Container Engine
Loaded: loaded (/etc/systemd/system/docker.service; disabled; preset: enabled)
Active: failed (Result: exit-code) since Wed 2025-03-05 11:32:59 CST; 2min 51s ago
Docs: https://docs.docker.com
Process: 55279 ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock --selinux-enabled=false --default-ulimit n>
Main PID: 55279 (code=exited, status=1/FAILURE)
CPU: 327ms
Mar 05 11:32:59 bogon systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE
Mar 05 11:32:59 bogon systemd[1]: docker.service: Failed with result 'exit-code'.
Mar 05 11:32:59 bogon systemd[1]: Failed to start docker.service - Docker Application Container Engine.
Mar 05 11:32:59 bogon systemd[1]: docker.service: Scheduled restart job, restart counter is at 3.
Mar 05 11:32:59 bogon systemd[1]: Stopped docker.service - Docker Application Container Engine.
Mar 05 11:32:59 bogon systemd[1]: docker.service: Start request repeated too quickly.
Mar 05 11:32:59 bogon systemd[1]: docker.service: Failed with result 'exit-code'.
Mar 05 11:32:59 bogon systemd[1]: Failed to start docker.service - Docker Application Container Engine.
然后通过 sudo journalctl -u docker.service
查看详细日志, 我安装步骤3操作了一遍问题就解决了 !!!!!!!!!!!
Mar 03 17:31:31 bogon dockerd[51559]: time="2025-03-03T17:31:31.511018337+08:00" level=info msg="stopping healthcheck following graceful shutdown" module=libcontainerd
Mar 03 17:31:31 bogon dockerd[51559]: time="2025-03-03T17:31:31.511046392+08:00" level=info msg="stopping event stream following graceful shutdown" error="context canceled" module=libcontainerd namespace=>
Mar 03 17:31:32 bogon dockerd[51559]: failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to register "bridge" driver: failed to create NAT chain DOC>
Mar 03 17:31:32 bogon systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE
Mar 03 17:31:32 bogon systemd[1]: docker.service: Failed with result 'exit-code'.
Mar 03 17:31:32 bogon systemd[1]: Failed to start docker.service - Docker Application Container Engine.
Mar 03 17:31:32 bogon systemd[1]: docker.service: Scheduled restart job, restart counter is at 1.
Mar 03 17:31:32 bogon systemd[1]: Stopped docker.service - Docker Application Container Engine.
Mar 03 17:31:32 bogon systemd[1]: Starting docker.service - Docker Application Container Engine...
通过豆包咨询了** failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to register "bridge" driver: failed to create NAT chain DOC>**
豆包给出的建议
当你在启动 Docker 守护进程时遇到 failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to register "bridge" driver: failed to create NAT chain 错误,这通常是由于 Docker 网络配置方面的问题,尤其是与 iptables 相关的 NAT 链创建失败导致的。以下是一些可能的解决办法:
1. 检查 iptables 状态
iptables 是 Linux 系统中用于管理网络规则的工具,Docker 在启动时会依赖它来创建必要的网络规则和 NAT 链。
查看 iptables 规则
bash
sudo iptables -L -n -v
此命令会列出当前的 iptables 规则,确保没有异常的规则阻止 Docker 创建 NAT 链。
重启 iptables 服务
某些情况下,重启 iptables 服务可以解决一些临时的配置问题。不过,不同 Linux 发行版中 iptables 服务的管理方式可能不同:
CentOS/RHEL 系统:
bash
sudo systemctl restart iptables
Debian/Ubuntu 系统:如果使用的是 iptables-persistent 来管理规则,可以尝试重启它:
bash
sudo systemctl restart netfilter-persistent
2. 清除 iptables 规则
如果 iptables 规则存在冲突或损坏,清除所有规则并重新加载可能会解决问题。
备份现有规则
在清除规则之前,建议先备份现有的 iptables 规则:
bash
sudo iptables-save > iptables.backup
清除规则
bash
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
重启 Docker 服务
bash
sudo systemctl restart docker
3. 检查内核模块
Docker 的网络功能依赖于一些内核模块,确保这些模块已正确加载。
检查 br_netfilter 模块
bash
lsmod | grep br_netfilter
如果没有输出,说明该模块未加载,可以使用以下命令加载:
bash
sudo modprobe br_netfilter
为了让系统在启动时自动加载该模块,可以创建一个配置文件:
bash
echo "br_netfilter" | sudo tee /etc/modules-load.d/br_netfilter.conf
检查 ip_tables 和 iptable_nat 模块
同样使用 lsmod 命令检查这两个模块是否已加载:
bash
lsmod | grep ip_tables
lsmod | grep iptable_nat
如果未加载,可以使用 modprobe 命令加载:
bash
sudo modprobe ip_tables
sudo modprobe iptable_nat
4. 检查 SELinux 或 AppArmor 状态
SELinux(Security-Enhanced Linux)和 AppArmor 是 Linux 系统中的安全机制,它们可能会限制 Docker 的网络操作。
临时禁用 SELinux
bash
sudo setenforce 0
这只是临时禁用 SELinux,重启系统后会恢复到原来的状态。如果禁用 SELinux 后 Docker 可以正常启动,说明 SELinux 可能是问题所在,你可以考虑调整 SELinux 的策略。
临时禁用 AppArmor
bash
sudo systemctl stop apparmor
sudo systemctl disable apparmor
同样,这只是临时禁用 AppArmor,重启系统后需要重新执行上述命令来禁用它。
5. 重新安装 Docker
如果以上方法都无法解决问题,可以尝试卸载并重新安装 Docker。
卸载 Docker
bash
sudo apt-get purge docker-ce docker-ce-cli containerd.io # 对于 Debian/Ubuntu 系统
sudo yum remove docker-ce docker-ce-cli containerd.io # 对于 CentOS/RHEL 系统
重新安装 Docker
按照 Docker 官方文档的指引,重新安装 Docker。
通过以上步骤,你应该能够解决 Docker 启动时创建 NAT 链失败的问题。如果问题仍然存在,建议查看系统日志以获取更多详细信息。