GitHub Actions Ubuntu Jammy Runner无法访问ports.ubuntu.com的解决方案咨询
遇到这种在GitHub Actions构建ARM64等非AMD64架构容器时,无法连接ports.ubuntu.com的问题,我给你几个可行的解决思路:
1. 切换到HTTPS协议访问源
目前你的日志里用的是HTTP(80端口),尝试把Dockerfile里的源地址从http://ports.ubuntu.com/ubuntu-ports改成https://ports.ubuntu.com/ubuntu-ports,很多时候HTTPS端口(443)的访问限制会比HTTP宽松,说不定能绕过当前的连接问题。
2. 替换为其他Ubuntu官方镜像源
如果ports.ubuntu.com确实对GitHub Actions的IP段做了限制,可以考虑改用其他支持多架构包的Ubuntu镜像源。比如把源地址替换成http://archive.ubuntu.com/ubuntu(这个源同样包含多架构的软件包),或者在Dockerfile里修改源配置:
RUN sed -i 's/ports.ubuntu.com/archive.ubuntu.com/g' /etc/apt/sources.list
3. 预先构建基础镜像减少源依赖
你可以在本地或者另一个不受IP限制的环境中,预先构建好包含所有需要依赖的基础镜像,推送到Docker Hub或者GitHub Container Registry,然后在GitHub Actions的构建流程中直接使用这个预制镜像,避免每次构建都去拉取ports.ubuntu.com的包。
4. 向Ubuntu基础设施团队反馈问题
正如你提到的,GitHub Actions的runner IP范围可以通过官方API获取,你可以向Ubuntu的基础设施维护团队提交反馈,说明GitHub Actions runner无法访问ports.ubuntu.com的情况,并提供对应的IP范围,请求他们解除限制或者调整防火墙规则。
5. 添加重试机制临时缓解
如果是偶发的网络波动或者临时限流,可以在GitHub Actions步骤中添加重试逻辑,比如给构建步骤设置重试次数:
- name: Build container uses: docker/build-push-action@v5 with: context: . platforms: linux/arm64 env: DOCKER_BUILDKIT: 1 retry: 3
不过这个方法只是临时缓解,不能解决根本的IP限制问题。
备注:内容来源于stack exchange,提问作者Clémence

