跳到主要内容

Docker Hub 与镜像加速

Docker Hub 是公共容器镜像仓库。公共镜像代理的域名、可用性和运营方会频繁变化,因此本页不维护未经验证的“免费镜像源列表”。应优先使用 Docker Hub、云厂商为自己账号提供的镜像加速地址,或组织自行管理的 pull-through cache。

拉取可信镜像

优先选择 Docker Official Image 或经过核验的 Verified Publisher,并使用明确版本:

docker pull nginx:1-alpine
docker image inspect nginx:1-alpine

浮动标签可能指向新的镜像内容。对可重复部署要求较高时,应在验证后记录 digest:

docker image inspect nginx:1-alpine \
--format '{{index .RepoDigests 0}}'

docker pull nginx@sha256:<verified-digest>

镜像来源、签名/证明、漏洞扫描和 SBOM 都属于软件供应链审查的一部分,镜像能成功拉取不等于它适合生产环境。

登录与推送

交互式登录会避免把密码直接写进命令历史:

docker login --username <docker-id>

CI 中使用权限最小化的访问令牌,并通过标准输入传入:

printf '%s' '<access-token>' | \
docker login --username '<docker-id>' --password-stdin

docker tag sample-api:1.0.0 <docker-id>/sample-api:1.0.0
docker push <docker-id>/sample-api:1.0.0

令牌应来自 CI Secret Store,不能提交到脚本、Compose、镜像层或文档。

配置 registry mirror

如果组织已有受信任的 Docker Hub mirror,可在 Linux Docker Engine 的 /etc/docker/daemon.json 中合并 registry-mirrors 配置:

/etc/docker/daemon.json
{
"registry-mirrors": [
"https://mirror.example.com"
]
}

不要覆盖文件中已有的日志、存储驱动、代理等设置。修改后验证 JSON 与 Docker 配置,再重启守护进程:

sudo dockerd --validate --config-file=/etc/docker/daemon.json
sudo systemctl restart docker
docker info

docker infoRegistry Mirrors 中确认实际生效地址。Docker Desktop 应通过 Settings → Docker Engine 合并同名配置,并按界面提示重启。

:::warning 信任边界 镜像代理能够看到拉取请求并向客户端提供镜像内容。只使用来源明确、启用 HTTPS、受组织管理的服务;不要因为某个公共域名暂时可用就加入生产配置。 :::

自建 pull-through cache

多个 Docker 主机反复从 Hub 拉取相同镜像时,可以按 Docker 官方文档部署 Registry pull-through cache。核心配置是在 Registry 的 config.yml 中设置:

config.yml
version: 0.1
proxy:
remoteurl: https://registry-1.docker.io

还需要为缓存配置持久化存储、垃圾回收、TLS、访问控制、容量监控和备份。若在缓存中配置 Docker Hub 私有账号,该账号可访问的私有内容也可能通过缓存暴露,因此必须给 mirror 本身增加认证和网络隔离。

Docker Hub mirror 只代理中央 Hub,不能把同一机制直接当作任意私有 Registry 的通用代理。

故障排查

现象检查项
unauthorized仓库是否私有、令牌权限和账号是否正确、凭据是否过期
toomanyrequests / 429Docker Hub 使用限制、登录状态,以及 CI 是否应使用组织缓存
TLS / 证书错误mirror 证书链、主机时间和企业代理;不要关闭证书验证规避问题
mirror 未生效daemon.json 是否有效、守护进程是否重启、docker info 是否列出地址
拉到旧内容检查标签是否可变、mirror 缓存状态,并用 digest 对比实际镜像

官方资料