Docker Registry Mirror Test & Config Generator

Validates real Docker Registry V2 pulls, ranks mirrors by your current network latency, and generates ready-to-use configuration.

0
Tested
0
Ready to use
0
Conditional
0
Unusable
—
Fastest local mirror
—
Protocol test time
Testing…
i
Protocol validation runs from the 17NAS probe node in St. Louis, US, and only answers "can this mirror serve an image". The Local latency column is measured by your own browser, and both the ranking and the generated config follow it. Some mirrors throttle or block by region, so a 429 / 403 from the US node does not mean it is unusable where you are.

Add your own mirror

Hostnames only (a port is fine). Nothing is stored, and up to 3 per run. Hostnames that resolve to private addresses are rejected so this page cannot be used as an internal port scanner.

This free test allows up to 3 custom mirrors. Sponsoring 17NAS helps us maintain and improve Docker tools.

Mirrors ready to use

No results yet — hit "Start test" above.

These mirrors are alive: some need a docker login first, some are throttling right now, some restrict our probe node by region. They are left out of the generated config below, but may work fine on your network.

Either the hostname does not resolve / connect, or it connects but returns a web page instead of an image manifest. The second kind is the trap: it looks fine in a browser, yet every docker pull fails. They stay listed here rather than being silently dropped.

Generated config

/etc/docker/daemon.json



            
i
How to apply it
  1. Write the content into /etc/docker/daemon.json
  2. Restart the Docker daemon: sudo systemctl restart docker
  3. Verify it took effect: docker info | grep -i registry
i
How to apply it
  1. Create the directory: sudo mkdir -p /etc/containerd/certs.d/docker.io
  2. Save the content above in that directory as hosts.toml
  3. Restart containerd: sudo systemctl restart containerd
i
How to configure Docker mirrors in 1Panel / DPanel

If your panel accepts one mirror address per line, switch to the 1Panel / DPanel tab above and copy the list generated from this test.

!
Only mirrors that passed as ready-to-use and that your own browser could reach, up to five, ordered by your latency. Docker tries them in order, so two or three fallbacks beat a single entry. Mirrors that need a login are left out — run docker login and add them by hand.

Two separate measurements. Protocol validation runs on the 17NAS probe node: it requests /v2/, follows the standard Docker flow for an anonymous token when it sees 401 + WWW-Authenticate: Bearer, fetches the manifest for library/alpine:latest with that token, and finally checks the response really is a manifest (via the Docker-Content-Digest header and media type) rather than a web page. Latency is measured by your own browser hitting each /v2/ endpoint three times and taking the median — that is the speed you will actually get, so it drives the ranking and the recommendations.

What the six statuses mean

  • Ready to use — a real manifest came back anonymously; drop it into your config.
  • Login required — the mirror is alive but wants a docker login first. Vendor-private accelerators almost all land here.
  • Rate limited — too many requests in a short window (HTTP 429). Temporary; retry in a while.
  • Access restricted — the mirror explicitly refused our probe node (HTTP 403). Typical of campus, intranet or geo-limited mirrors; it may work perfectly on the right network.
  • Not a registry — it connects, but answers with a web page, a missing image or a stray redirect. Tools that only read the HTTP status code call these "available"; put one in daemon.json and docker pull is guaranteed to fail.
  • Unreachable — the hostname has no DNS record left, or the connection / TLS handshake fails. Public mirrors usually just drop their DNS when they shut down, so these can go from your bookmarks.

Setting up a mirror that needs a login

Run docker login <mirror-host> with the credentials your provider gave you; they land in ~/.docker/config.json. Then add the host to registry-mirrors by hand. Note that the credentials in that file are base64-encoded, not encrypted — do not push it to a public repo along with your backups.

!
Public mirrors come and go — one that works today may be gone next week, and these results only describe this moment. Keep two or three fallbacks configured and retest here whenever pulls slow down or fail. Also, local latency is a browser round-trip shaped by the TLS handshake and browser security policy: use it to compare mirrors, not as a prediction of docker pull throughput.

Related tools