Symptoms & Diagnosis
Slow Docker pull performance is a common bottleneck in DevOps pipelines. You might notice layers getting stuck in the “Waiting” or “Downloading” state for minutes, or the download speed failing to utilize your full network bandwidth.
To diagnose the issue, first check your current configuration and network latency to the Docker Registry. Use the following command to inspect your Docker daemon settings:
docker info
Pay close attention to the “Registry Mirrors” section. If it is empty and you are far from the primary Docker Hub servers, high latency is likely the cause. You can also test your connection speed directly to the registry API to identify if the bottleneck is your ISP or the Docker daemon configuration.

Troubleshooting Guide
To resolve slow performance, you should first optimize how the Docker Engine handles concurrent downloads. By default, Docker downloads only a few layers at a time.
1. Increase Concurrent Downloads
Edit your /etc/docker/daemon.json file (or the equivalent path on Windows/Mac) to increase the number of simultaneous downloads. This significantly improves speed on high-bandwidth connections.
{
"max-concurrent-downloads": 10
}
After saving the file, restart the Docker service to apply the changes:
sudo systemctl restart docker
2. Configure Registry Mirrors
Using a mirror closer to your physical location can drastically reduce pull times. Below are common mirror configurations for different environments:
| Region/Provider | Mirror URL |
|---|---|
| Google Cloud | https://mirror.gcr.io |
| China (Azure) | https://dockerhub.azk8s.cn |
| Self-Hosted | http://your-local-cache:5000 |
3. Disable IPv6 (If applicable)
In some network environments, Docker may attempt to pull over IPv6, which can lead to timeouts if the network is not properly configured. Forcing IPv4 can often resolve “stuck” pulls.
Prevention
The best way to speed up a pull is to minimize the data being transferred. Long-term prevention involves optimizing your images and your infrastructure.
Use Smaller Base Images
Switching from standard distributions like Ubuntu to minimal images like Alpine or Distroless can reduce pull sizes by over 80%.
# Heavy Base
FROM node:20
# Lightweight Alternative
FROM node:20-alpine
Implement Local Caching
For teams working in the same office or data center, setting up a Pull-Through Cache (Docker Registry as a mirror) is highly effective. Once one person pulls an image, others pull it from the local network at gigabit speeds rather than over the internet.
Finally, leverage multi-stage builds to ensure that build-time dependencies are never included in the final image, keeping the production pull payload as light as possible.