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

GitHub Actions中Docker容器无法访问互联网的问题排查

GitHub Actions中Docker容器无法ping通外部IP的问题解决

问题描述

我希望在GitHub Actions运行的容器内部ping某个外部IP,编写了如下GitHub Actions工作流和docker-compose文件:

GitHub Actions工作流

name: PING

on:
  push:

jobs:
  ping:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Ping Internet
        run: docker-compose -f test/docker-compose.yml up --force-recreate --build --abort-on-container-exit

docker-compose文件

version: '3.1'

services:
  pinger:
    privileged: true
    image: alpine:3.17
    command: ping -c 16 -s 64 8.8.8.8
    networks:
      default:
        ipv4_address: 10.0.0.5

networks:
  default:
    driver: bridge
    ipam:
     config:
       - subnet: 10.0.0.0/24
         gateway: 10.0.0.1

上述配置在本地运行完全正常,但在GitHub Actions环境中执行时,无法收到ping响应,容器无法访问互联网。

原因分析

  • GitHub Actions的Ubuntu runner环境中,手动指定的10.0.0.0/24子网可能与runner自身的网络存在冲突,导致容器无法正确路由到外部网络。
  • 手动配置的网关10.0.0.1在GitHub Actions环境中未被正确设置路由规则,无法将容器的流量转发至公网。

解决方法

方案1:移除自定义网络配置,使用Docker默认网络

修改docker-compose.yml,删除手动指定的网络和静态IP配置,让Docker自动分配网络资源:

version: '3.1'

services:
  pinger:
    privileged: true
    image: alpine:3.17
    command: ping -c 16 -s 64 8.8.8.8

Docker默认的bridge网络已适配GitHub Actions runner的网络环境,可直接访问公网。

方案2:使用host网络模式共享runner网络

如果需要保留自定义网络的部分特性,可将容器设置为host网络模式,让容器直接共享runner的网络栈:

version: '3.1'

services:
  pinger:
    privileged: true
    image: alpine:3.17
    command: ping -c 16 -s 64 8.8.8.8
    network_mode: host

注意:host模式下无需再配置自定义网络和静态IP,容器将直接使用runner的网络配置访问外部。

补充说明

在GitHub Actions环境中,尽量避免手动指定子网和网关,除非明确知晓runner的网络拓扑结构。默认的Docker网络配置已完成公网访问的适配,无需额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:05:36