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

Ubuntu22.04下Docker启动失败(iptables相关)求助

Docker启动失败:iptables提示MASQUER链不存在(Ubuntu 22.04)

问题描述

在Ubuntu 22.04上启动docker.service失败,状态显示Main process exited, code=exited, status=1/FAILURE。执行sudo systemctl status docker排查发现,Docker守护进程初始化网络控制器时创建默认bridge网络失败,核心报错是iptables执行NAT规则时提示:iptables v1.8.7 (nf_tables): Chain 'MASQUER' does not exist。

已尝试刷新iptables、重装iptables,参考相关方案未解决,怀疑与当前运行的OVPN服务器有关,寻求解决办法。

相关报错信息

systemctl status docker输出

sudo systemctl status docker
× docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Mon 2024-05-06 18:25:25 UTC; 6min ago
TriggeredBy: × docker.socket
       Docs: https://docs.docker.com
    Process: 1632897 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=1/FAILURE)
   Main PID: 1632897 (code=exited, status=1/FAILURE)

May 06 18:25:22 server systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE
May 06 18:25:22 server systemd[1]: docker.service: Failed with result 'exit-code'.
May 06 18:25:22 server systemd[1]: Failed to start Docker Application Container Engine.
May 06 18:25:25 server systemd[1]: docker.service: Scheduled restart job, restart counter is at 3.
May 06 18:25:25 server systemd[1]: Stopped Docker Application Container Engine.
May 06 18:25:25 server systemd[1]: docker.service: Start request repeated too quickly.
May 06 18:25:25 server systemd[1]: docker.service: Failed with result 'exit-code'.
May 06 18:25:25 server systemd[1]: Failed to start Docker Application Container Engine.

May 06 18:25:22 server systemd[1]: Starting Docker Application Container Engine...
░░ Subject: A start job for unit docker.service has begun execution
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░
░░ A start job for unit docker.service has begun execution.
░░
░░ The job identifier is 3281362.
May 06 18:25:22 server dockerd[1632897]: time="2024-05-06T18:25:22.186308133Z" level=info msg="Starting up"
May 06 18:25:22 server dockerd[1632897]: time="2024-05-06T18:25:22.190370332Z" level=info msg="detected 127.0.0.53 nameserver, assuming systemd-resolved, so using resolv.conf: /run/systemd/resolve/resolv.conf"
May 06 18:25:22 server dockerd[1632897]: time="2024-05-06T18:25:22.292233833Z" level=info msg="[graphdriver] using prior storage driver: overlay2"
May 06 18:25:22 server dockerd[1632897]: time="2024-05-06T18:25:22.292729359Z" level=info msg="Loading containers: start."
May 06 18:25:22 server dockerd[1632897]: time="2024-05-06T18:25:22.884221906Z" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to set a preferred IP address"
May 06 18:25:22 server dockerd[1632897]: failed to start daemon: Error initializing network controller: error creating default "bridge" network: Failed to Setup IP tables: Unable to enable NAT rule:  (iptables failed: iptables --wait -t nat -I POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUER>
May 06 18:25:22 server dockerd[1632897]:  (exit status 4))
May 06 18:25:22 server systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE
░░ Subject: Unit process exited
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░
░░ An ExecStart= process belonging to unit docker.service has exited.
░░
░░ The process' exit code is 'exited' and its exit status is 1.
May 06 18:25:22 server systemd[1]: docker.service: Failed with result 'exit-code'.

手动执行iptables命令的报错

sudo iptables --wait -t nat -I POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUER
iptables v1.8.7 (nf_tables): Chain 'MASQUER' does not exist
Try `iptables -h' or 'iptables --help' for more information

解决方法

1. 修复iptables链名称拼写问题

报错中的链名MASQUER是错误的,正确链名为MASQUERADE,大概率是Docker生成规则时出现截断或配置错误。先手动执行正确的规则测试:

sudo iptables --wait -t nat -I POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

如果命令执行成功,说明是Docker规则拼写问题,可通过修改Docker daemon配置文件(/etc/docker/daemon.json)自定义网络规则,或重置Docker网络配置。

2. 切换iptables后端为legacy模式

Ubuntu 22.04默认用nf_tables作为iptables后端,部分场景下会和Docker、OVPN存在兼容性冲突。切换到legacy模式:

sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

切换完成后重启Docker:

sudo systemctl restart docker

3. 排查OVPN对iptables的影响

OVPN服务器会修改iptables规则,可能清空或篡改了nat表中的链。先临时停止OVPN服务,再尝试启动Docker:

sudo systemctl stop openvpn
sudo systemctl start docker

如果Docker能正常启动,说明OVPN规则与Docker冲突,需要修改OVPN配置,避免删除或干扰MASQUERADE链,或在OVPN启动脚本中保留Docker所需的iptables规则。

4. 重建Docker默认网络

若以上方法无效,可删除Docker默认bridge网络后重建:

sudo systemctl stop docker
sudo ip link set docker0 down
sudo brctl delbr docker0
sudo systemctl start docker

(若缺少brctl工具,先安装:sudo apt install bridge-utils)

内容的提问来源于stack exchange,提问作者DMX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:24:53