Operations 7 min read

How to Fix Docker Pull Timeouts with Reliable Chinese Mirror Sources (2025 Update)

This guide explains why Docker pull commands often timeout in China due to outdated foreign registries, lists common invalid mirror configurations, provides three verified mirror URLs for 2025, and walks through editing the daemon.json file, restarting Docker, and testing the setup, while sharing practical troubleshooting lessons.

Java Architect Handbook
Java Architect Handbook
Java Architect Handbook
How to Fix Docker Pull Timeouts with Reliable Chinese Mirror Sources (2025 Update)

Problem Background

When pulling Docker images on a server located in China, the default Docker registry mirrors are hosted abroad. Network latency or blocking often causes timeout errors.

Common Invalid Mirror Configurations

Many online tutorials list long arrays of registry-mirrors and insecure-registries. Most of those domains are now unreachable, leading to persistent pull failures.

{
  "registry-mirrors": [
    "https://docker.1panelproxy.com",
    "https://2m11665s.mirror.aliyuncs.com",
    "https://registry.docker-cn.com",
    "https://dockerhub.azk8s.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com",
    "https://k8s.gcr.io",
    "https://github-releases.githubusercontent.com",
    "https://ustc-edu-cn.mirror.aliyuncs.com"
  ],
  "insecure-registries": [
    "registry.me:5000",
    "http://docker.mirrors.ustc.edu.cn",
    "https://k8s.gcr.io",
    "https://github-releases.githubusercontent.com",
    "https://registry-1.docker.io",
    "decs.com"
  ],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

Verified Mirrors (2025)

Testing identified three mirrors that provide stable, MB‑level download speeds.

{
  "registry-mirrors": [
    "https://docker.1ms.run",   // millisecond mirror – fastest, recommended
    "https://dockerproxy.com", // stable proxy with good compatibility
    "https://hub.rat.dev"      // backup source for occasional outages
  ]
}

Configuration Steps

Edit the Docker daemon configuration file /etc/docker/daemon.json and replace its content with the JSON shown above.

Reload the systemd daemon and restart Docker:

systemctl daemon-reload && systemctl restart docker

Verify the new mirrors by pulling a small image, for example: docker pull hello-world Successful download confirms the setup.

Practical Validation Tips

Check domain reachability with ping docker.1ms.run. A reply indicates the mirror is reachable from the current network.

Test pull capability directly: docker pull docker.1ms.run/hello-world If the image downloads, the mirror works.

Key Lessons

Diagnose the root cause (network, registry, permissions) before applying a configuration.

Mirror URLs can become obsolete quickly; prefer sources published within the last year.

AI can help locate current mirrors, but each URL should be manually verified (e.g., ping, test pull).

cloud nativeDockerdevopsLinuxTroubleshootingregistry-mirror
Java Architect Handbook
Written by

Java Architect Handbook

Focused on Java interview questions and practical article sharing, covering algorithms, databases, Spring Boot, microservices, high concurrency, JVM, Docker containers, and ELK-related knowledge. Looking forward to progressing together with you.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.