必须开启net.ipv4.ip_forward=1,因GitLab Runner构建容器依赖宿主机IP转发才能访问外网;值为0时容器断网,表现为curl失败、ping不通、日志警告;需sysctl -w临时启用并写入/etc/sysctl.conf永久生效,云环境还需配置网卡级IPForward。

直接开启宿主机的 net.ipv4.ip_forward=1,并确保该设置永久生效——这是解决 GitLab Runner 构建容器断网问题最核心、最常被忽略的一步。
为什么必须开 ip_forward?
GitLab Runner 启动的构建容器(如 docker:latest 或自定义镜像)默认使用 Docker 的桥接网络(docker0)。容器要访问外网(拉取依赖、上传制品、连 Git 仓库等),数据包必须经由宿主机转发:从容器发出 → 到宿主机 docker0 接口 → 经路由表判断 → 转发到宿主机物理网卡(如 eth0)→ 出公网。这个“转发”动作,完全依赖内核参数 net.ipv4.ip_forward。值为 0 时,宿主机拒绝中转任何跨接口的 IPv4 包,容器就彻底“失联”。
典型现象包括:
- 构建日志中反复出现
curl: (7) Failed to connect to xxx port 443: Connection refused或超时 - 容器内
ping 8.8.8.8不通,但宿主机可以 ping 通 - Runner 日志或
docker run启动时明确警告:WARNING: IPv4 forwarding is disabled. Networking will not work
快速验证与临时修复
登录 Runner 宿主机,执行以下命令确认状态并立即恢复网络:
- 查看当前值:
sysctl net.ipv4.ip_forward—— 若输出= 0,即为根因 - 临时开启(重启前有效):
sudo sysctl -w net.ipv4.ip_forward=1 - 再启动一个测试容器验证:
docker run --rm alpine ping -c 2 8.8.8.8,应能成功
永久生效(避免重启后复发)
临时设置在服务器重启后会丢失,必须写入内核配置文件:
- 编辑
/etc/sysctl.conf:echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf - 立即加载新配置:
sudo sysctl -p - (可选但推荐)检查是否真正加载:
sudo sysctl net.ipv4.ip_forward应返回= 1
注意网卡级转发(部分云环境需额外配置)
某些系统(尤其是使用 systemd-networkd 的云服务器或新版发行版)还需显式启用对应网卡的转发能力:
- 查看主网卡(如
eth0)转发状态:cat /proc/sys/net/ipv4/conf/eth0/forwarding,若为0需补充配置 - 编辑其 network 配置文件(如
/etc/systemd/network/10-eth0.network),在[Network]段下添加:IPForward=ipv4 - 重启网络服务:
sudo systemctl restart systemd-networkd


















