Docker镜像拉取白名单由加速平台(如DaoCloud)后端实现,非Docker原生功能;用户需通过预检脚本验证镜像是否匹配白名单规则(如docker.io/*),registry-mirrors仅路由请求但受白名单约束,私有镜像须配置insecure-registries或认证登录。

Docker 镜像拉取白名单不是 Docker 自身原生支持的“全局开关”,而是由镜像加速服务(如 DaoCloud、阿里云等)在后端实现的访问控制机制。它不通过 daemon.json 或 Docker CLI 直接配置,而是依赖加速平台提供的白名单文件(如 allows.txt)和配套工具链来生效。
下面分三类场景说明怎么设、在哪设、怎么验证:
白名单由加速平台管理,用户只需确认镜像是否被允许
加速服务(例如 DaoCloud 公开镜像仓库)会维护一个内部白名单,只同步和代理列表中明确放行的镜像路径。
你无法手动编辑这个白名单,但可以:
- 查看官方公布的白名单规则(如
docker.io/*、ghcr.io/immich-app/*) - 使用预检脚本验证目标镜像是否在允许范围内:
./hack/verify-image.sh langgenius/dify-plugin-daemon:latest # 输出 "Status: Allowed (docker.io/* rule matched)" 表示已准入
如果镜像不在白名单里,即使改了加速地址,拉取仍会失败或回退到原始源。
本地加速配置要配合白名单使用,不能绕过
你在 /etc/docker/daemon.json 中配置的 registry-mirrors 只负责路由请求,不改变白名单逻辑。例如:
{
"registry-mirrors": ["https://docker.m.daocloud.io"]
}这样设置后,执行 docker pull nginx:alpine 会自动转成 docker.m.daocloud.io/library/nginx:alpine,但最终能否拉到,取决于 nginx 是否在 DaoCloud 的白名单中(通常是的)。而拉 mycorp/internal-app:1.2 就不会走这个镜像源——它压根不匹配 docker.io/* 规则。
所以关键点是:
- 无域名前缀的镜像(如
redis、nginx)→ 走registry-mirrors,受白名单约束 - 带域名的镜像(如
harbor.example.com/app、ghcr.io/user/repo)→ 不走registry-mirrors,需单独处理(见下条)
私有/非标镜像要另配,不进白名单也得能拉
如果你的镜像不在任何公开加速白名单里(比如公司 Harbor、自建 registry、或 quay.io/private-repo),那就不能依赖加速服务,而应:
- 把私有仓库加进
insecure-registries(HTTP 或自签名 HTTPS 场景):{ "insecure-registries": ["harbor.internal:8080", "192.168.1.100:5000"] } - 确保已登录认证(如有需要):
docker login harbor.internal:8080 -u admin -p xxx
- 拉取时用完整地址:
docker pull harbor.internal:8080/myapp:prod
这类操作完全绕开白名单机制,靠的是本地信任配置 + 认证授权。
不复杂但容易忽略。


















