使用GitHub Service Containers是否会占用Docker拉取速率限额?
GitHub Actions服务容器拉取Docker镜像的速率限额问题
核心结论分场景说明:
自托管运行器(你的配置用的就是这种)
自托管机器上拉取Docker Hub镜像(比如postgres)会直接占用Docker的公共速率限额,因为拉取请求是从你的自托管机器IP发起的,和本地手动拉取完全一样。Docker Hub的限额是:匿名用户每6小时最多100次拉取,认证用户每6小时200次。如果你的自托管集群规模大、流水线触发频繁,很容易触发限额导致拉取失败。GitHub托管运行器
GitHub对托管运行器拉取Docker Hub镜像有特殊优化,会通过内部缓存或代理处理,不会占用个人/组织的Docker限额,这部分成本由GitHub承担,无需担心。
解决建议:
切换到GitHub Container Registry(GHCR)镜像
用GHCR上的官方PostgreSQL镜像替代Docker Hub的,GHCR对GitHub Actions的拉取有专属限额,不会占用Docker Hub的额度。修改后的配置示例:jobs: build: name: Build & Analyse runs-on: ["self-hosted", "Linux"] env: ImageOS: ubuntu20 services: db: image: ghcr.io/postgres/postgres env: POSTGRES_USER: test POSTGRES_PASSWORD: test1234 POSTGRES_DB: test ports: ["5432:5432"] options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5给自托管运行器配置Docker Hub认证
如果必须用Docker Hub镜像,在自托管机器上登录Docker Hub(可以在流水线里加docker login步骤,或者在机器上持久化登录信息),这样就能享受认证用户的更高限额(每6小时200次)。配置本地镜像缓存
在自托管运行器上搭建本地Docker镜像缓存(比如用registry镜像做私有缓存),减少重复拉取相同镜像的次数,从根源降低触发限额的概率。
内容的提问来源于stack exchange,提问作者Narendran Kannan
相关产品推荐
相关产品推荐

