Sửa lỗi Docker: Get "https://registry-1.docker.io/v2/": context deadline exceeded

beginner🐳 Docker2026-06-04| Docker Engine trên Linux (Ubuntu, CentOS, Debian), Docker Desktop trên Windows/macOS

Error Message

Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded
#docker#registry#timeout#mạng#pull

Vấn đề: Tại sao quá trình Pull bị quá hạn (Timeout)

Bạn nhập docker pull, nhấn Enter và chờ đợi. Thay vì các thanh tiến trình thông thường, terminal đứng yên trong suốt 60 giây. Cuối cùng, nó dừng lại với một thông báo quá hạn (timeout):

Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded

Về cơ bản, đồng hồ bấm giờ nội bộ của Docker đã về mức không. Nó đã cố gắng kết nối với registry chính thức, nhưng mạng không phản hồi đủ nhanh. Đây thường không phải là lỗi của chính Docker. Thay vào đó, hãy coi đó là một "tín hiệu bận" do tường lửa doanh nghiệp, DNS chậm chạp hoặc cầu nối mạng (network bridge) bị cấu hình sai.

Quy trình Debug: Xác định điểm nghẽn

Đừng bắt đầu thay đổi các thiết lập một cách mù quáng. Trước tiên, hãy tìm chính xác nơi tín hiệu bị ngắt. Chạy các bước kiểm tra sau để xác định nguyên nhân.

1. Kiểm tra kết nối cơ bản

Máy của bạn có thể nhìn thấy registry không? Kiểm tra kết nối tới Docker Hub API:

ping registry-1.docker.io

Nhìn vào thời gian tính bằng mili giây. Nếu bạn thấy độ trễ trên 500ms, kết nối của bạn quá chậm đối với quá trình bắt tay (handshake) mặc định của Docker. Nếu bạn nhận được thông báo "unknown host", hệ thống của bạn hoàn toàn không tìm thấy tên miền này.

2. Kiểm tra tốc độ DNS

Các máy chủ DNS do nhà cung cấp dịch vụ mạng (ISP) cung cấp thường nổi tiếng là chậm hoặc thỉnh thoảng chặn các tên miền registry. Sử dụng nslookup để xem việc phân giải mất bao lâu:

nslookup registry-1.docker.io

Nếu lệnh này mất hơn 2 giây để trả về địa chỉ IP, Docker gần như chắc chắn sẽ bị quá hạn trước khi quá trình tải xuống bắt đầu.

Cách sửa lỗi 'Context Deadline Exceeded' hiệu quả

Giải pháp 1: Chuyển sang DNS nhanh hơn

Cách khắc phục hiệu quả nhất là trỏ Docker tới Google (8.8.8.8) hoặc Cloudflare (1.1.1.1). Bạn không cần phải thay đổi toàn bộ cấu hình hệ điều hành; bạn có thể áp dụng điều này riêng cho Docker daemon.

Mở hoặc tạo tệp /etc/docker/daemon.json và thêm mảng DNS:

{
  "dns": ["1.1.1.1", "8.8.8.8"]
}

Áp dụng các thay đổi bằng cách khởi động lại dịch vụ:

sudo systemctl restart docker

Giải pháp 2: Cấu hình Proxy

Nếu bạn làm việc sau một proxy doanh nghiệp, Docker cần được hướng dẫn rõ ràng cách định tuyến lưu lượng truy cập. Nó không tự động nhận các biến EXPORT từ shell của bạn. Bạn phải cấu hình trực tiếp dịch vụ systemd.

  • Tạo thư mục cấu hình riêng biệt:

sudo mkdir -p /etc/systemd/system/docker.service.d

  
  - Tạo tệp `http-proxy.conf` với chi tiết proxy cụ thể của bạn:
    ```
[Service]
Environment="HTTP_PROXY=http://proxy.yourcompany.com:8080/"
Environment="HTTPS_PROXY=http://proxy.yourcompany.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1"
  • Tải lại cấu hình và khởi động lại Docker:

sudo systemctl daemon-reload sudo systemctl restart docker


### Giải pháp 3: Khắc phục sai lệch MTU (Dành cho người dùng VPN)
Bạn đang sử dụng VPN? Các gói tin mạng của bạn có thể quá lớn đối với đường hầm mã hóa. Khi các gói tin quá lớn, chúng sẽ bị loại bỏ, dẫn đến tình trạng treo máy khó hiểu khi bắt đầu tải xuống.

MTU tiêu chuẩn là 1500. Hãy thử giảm xuống 1450 trong tệp `daemon.json` để cung cấp cho các gói tin nhiều "không gian thở" hơn:

{ "mtu": 1450 }


### Giải pháp 4: Sử dụng Mirror Registry cục bộ
Nếu khu vực địa lý của bạn có kết nối kém tới các máy chủ của Docker Hub tại Mỹ, hãy sử dụng một mirror gần hơn. Điều này giúp bỏ qua các vấn đề định tuyến khoảng cách xa. Thêm nội dung này vào `daemon.json` của bạn:

{ "registry-mirrors": ["https://mirror.gcr.io"] }


## Xác minh: Kiểm tra kết quả
Kiểm tra kết quả bằng cách pull một image nhỏ. Đừng lãng phí thời gian pull một cơ sở dữ liệu 500MB; hãy sử dụng `alpine`, chỉ nặng khoảng 5MB:

docker pull alpine:latest


Nếu các layer được tải xuống ngay lập tức, điểm nghẽn đã được loại bỏ.

## Mẹo chuyên nghiệp: Tránh trùng lặp mạng
Đôi khi tình trạng timeout xảy ra do mạng nội bộ của Docker (như 172.17.0.0/16) trùng lặp với dải IP thực tế của văn phòng bạn. Khi lập kế hoạch cơ sở hạ tầng, việc sử dụng [IP Subnet Calculator](https://toolcraft.app/en/tools/developer/ip-subnet-calculator) sẽ giúp bạn chọn các dải IP an toàn, không xung đột với định tuyến cục bộ. Điều này ngăn chặn các vấn đề kết nối "ma" vốn là nỗi ám ảnh khi debug.

## Tóm tắt nhanh

  - **DNS là nghi phạm chính:** Phân giải tên chậm gây ra 90% các lỗi này.
  - **Daemon JSON là người bạn đồng hành:** Hầu hết các bản sửa lỗi mạng đều nằm trong `/etc/docker/daemon.json`.
  - **Proxy cần thiết lập riêng:** Docker chạy như một dịch vụ, vì vậy nó cần cấu hình proxy systemd riêng.
  - **MTU quan trọng đối với VPN:** Nếu ping nhỏ hoạt động nhưng pull lớn thất bại, hãy hạ MTU xuống 1400 hoặc 1450.

Related Error Notes