Docker镜像仓库无内置网络白名单,需依赖访问层策略:ACR通过VPC白名单+RAM权限控制,Harbor支持项目级IP白名单+认证前置,自建Registry/Nexus需反向代理或防火墙兜底,所有方案须强制HTTPS并落实最小权限与审计。

Docker 镜像仓库本身不内置“网络白名单”功能,真正的访问控制需依赖仓库服务的访问层策略。不同类型的仓库实现方式差异明显:公共加速服务(如 DaoCloud、阿里云 ACR)在平台侧统一管控;私有仓库(如 Harbor、Nexus、自建 registry)则通过网络层或身份认证层配置;而原生 Docker Registry 极简,需额外代理或防火墙配合。
阿里云 ACR:VPC 白名单 + RAM 子账号权限
阿里云容器镜像服务(ACR)提供企业级网络隔离能力:
- 在 ACR 控制台「访问控制」中,添加允许访问的 VPC 内网 IP 段(例如 192.168.10.0/24),外部公网默认拒绝
- 若需公网有限访问,可开启「公网访问」并绑定弹性公网 IP,再配合安全组限制源 IP
- RAM 子账号必须被授予最小必要权限(如 acr:PullRepository),避免使用 ACRFullAccess 全权限策略
- 所有拉取请求最终由 ACR 后端校验:IP 在白名单内 且 凭据有对应仓库的拉取权限,二者缺一不可
Harbor:项目级 IP 白名单 + 认证前置
Harbor 企业版支持基于 IP 的访问控制(社区版需借助反向代理实现):
- 进入项目设置 → 「配置管理」→ 开启「IP 白名单」,填入 CIDR 格式地址(如 10.0.5.0/24, 172.20.0.100)
- 该白名单仅对未登录用户(匿名访问)生效;已登录用户仍受角色权限约束,IP 不在名单内时直接返回 403
- 生产环境建议关闭匿名访问,改用机器人账号(Robot Account)供 CI/CD 使用,并将其加入白名单范围
- 搭配 Nginx 反向代理时,可在 proxy_pass 前加
allow/deny规则强化控制
自建 Registry 或 Nexus:靠反向代理+防火墙兜底
原生 Docker Registry 和 Nexus Repository Manager 默认无 IP 白名单模块,需外挂防护:
- 用 Nginx 或 Traefik 作为前置代理,在 location 块中配置
allow 192.168.20.0/24; deny all; - 宿主机启用 iptables/nftables,限制 registry 端口(如 5000)仅接受指定子网连接:
iptables -A INPUT -p tcp --dport 5000 -s 10.100.0.0/16 -j ACCEPTiptables -A INPUT -p tcp --dport 5000 -j DROP - Nexus 3 可通过「Repository → HTTP → Allow anonymous access」配合「Anonymous user ID」映射到低权限 guest 用户,再结合「Repository → Permissions」精确限定可读仓库
- 所有方案均需确保 TLS 已启用(HTTPS),防止凭据明文传输
通用加固建议(无论哪种仓库)
网络白名单只是纵深防御的一环,还需同步落实:
- 强制使用 HTTPS,禁用 HTTP registry(Docker daemon 配置中移除
insecure-registries) - 为每个自动化场景(Jenkins、GitLab Runner)分配独立机器人账号,设置短期有效期和最小权限
- 开启仓库操作审计日志,记录拉取/推送的客户端 IP、时间、镜像名、账号信息
- 定期清理长期未使用的账号与过期凭证,尤其避免硬编码密码到 docker-compose.yml 或 CI 脚本中


















