Sửa lỗi AWS ECR Push: 'no basic auth credentials'

intermediate☁️ AWS2026-05-01| Docker, AWS CLI (v1 hoặc v2), Linux/macOS/Windows, Amazon Elastic Container Registry (ECR)

Error Message

Error response from daemon: no basic auth credentials
#ecr#docker#authentication#aws-cli

Vấn đềBạn chạy lệnh docker push và mong đợi image của mình sẽ được đẩy lên cloud. Tuy nhiên, nó thất bại ngay lập tức. Bạn nhận được thông báo lỗi 'no basic auth credentials' khó chịu, mặc dù hôm qua mọi thứ vẫn hoạt động hoàn hảo. Điều này thường xảy ra do môi trường Docker cục bộ của bạn bị mất kết nối với hệ thống AWS.

$ docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app:latest
The push refers to repository [123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app]
Error response from daemon: no basic auth credentials

Tại sao điều này xảy raVấn đề cốt lõi rất đơn giản: Docker client của bạn không còn được xác thực. Thông thường, điều đó có nghĩa là session token của bạn đã hết hạn.

Token xác thực của AWS ECR có thời hạn ngắn. Theo mặc định, chúng hết hạn sau mỗi 12 giờ. Đây là một tính năng bảo mật để đảm bảo rằng các thông tin xác thực bị rò rỉ không cấp quyền truy cập vô thời hạn. Không giống như Docker Hub, nơi một lần đăng nhập có thể kéo dài hàng tuần, ECR yêu cầu bạn phải làm mới 'mật khẩu' ít nhất hai lần một ngày nếu bạn push thường xuyên.

Các bước khắc phục### 1. Kiểm tra định danh AWS của bạnĐầu tiên, hãy xác minh bạn là ai trong terminal. AWS có thể đang cố gắng sử dụng một bộ thông tin xác thực khác với mong đợi của bạn. Chạy lệnh này để xem profile hiện đang hoạt động:

aws sts get-caller-identity

Nếu lệnh này trả về lỗi, AWS CLI của bạn chưa được cấu hình. Hãy chạy aws configure để thiết lập Access Key và Secret Key trước khi tiếp tục.

2. Làm mới Token (AWS CLI v2)Hầu hết các thiết lập hiện đại đều sử dụng AWS CLI phiên bản 2. Hãy sử dụng lệnh get-login-password để lấy một token mới và chuyển trực tiếp vào Docker. Đây là cách đăng nhập gọn gàng nhất.

aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com

Danh sách kiểm tra nhanh:

  • Thay us-east-1 bằng region thực tế của bạn (ví dụ: eu-west-1).
  • Thay 123456789012 bằng AWS Account ID gồm 12 chữ số của bạn.
  • Giữ username là AWS. Đây là một chuỗi tĩnh, không phải tên IAM của bạn.

3. Khắc phục cho AWS CLI v1 (Cũ)Nếu bạn đang duy trì một build server cũ sử dụng CLI v1, lệnh sẽ hơi khác một chút. Nó tạo ra một chuỗi lệnh đầy đủ mà bạn phải thực thi bằng subshell:

$(aws ecr get-login --no-include-email --region us-east-1)

4. Quản lý nhiều ProfileBạn đang phải xử lý cả tài khoản AWS công việc và cá nhân? Có thể bạn đã xác thực nhầm tài khoản. Buộc CLI sử dụng một profile cụ thể bằng cách thêm flag:

aws ecr get-login-password --region us-east-1 --profile work-profile | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com

Xác minh kết quảHãy tìm thông báo Login Succeeded. Khi bạn thấy nó, hãy thử push lại. Nó sẽ hoạt động ngay lập tức. Nếu vẫn thất bại, hãy kiểm tra file ~/.docker/config.json của bạn. Đôi khi, các công cụ hỗ trợ thông tin xác thực bên ngoài (phổ biến trên Docker Desktop cho Mac hoặc Windows) lưu bộ nhớ đệm dữ liệu cũ. Kiểm tra phần auths để đảm bảo URL của ECR registry khớp chính xác với đích đến bạn muốn push.

Mẹo chuyên nghiệp để phòng tránh### Tự động hóa với ECR Credential HelperĐăng nhập thủ công làm giảm năng suất. Bạn có thể cài đặt helper docker-credential-ecr-login. Nó tự động xử lý chu kỳ làm mới 12 giờ ở chế độ nền. Sau khi cài đặt, bạn có thể chạy docker push bất kỳ lúc nào mà không cần nhập lại lệnh đăng nhập.

Kiểm tra quyền IAMUser IAM của bạn cần quyền ecr:GetAuthorizationToken. Nếu không có nó, lệnh đăng nhập sẽ thất bại với lỗi "Access Denied" trước khi Docker có cơ hội thử. Nếu bạn đang sử dụng các công cụ CI/CD như GitHub Actions, hãy đảm bảo role của runner đã được gán quyền này.

Lỗi đánh máy URL RegistryChỉ cần thiếu một ký tự cũng có thể làm hỏng mọi thứ. URL phải tuân theo định dạng: [account-id].dkr.ecr.[region].amazonaws.com. Nếu bạn quên các đoạn dkr hoặc ecr, Docker sẽ không nhận diện được registry và sẽ quay lại lỗi no basic auth chung chung đó.

Giữ bí mật an toànKhi tạo IAM user cho việc push tự động, đừng bao giờ sử dụng lại mật khẩu cũ. Tôi thường tạo một chuỗi ngẫu nhiên 32 ký tự cho mỗi dịch vụ mới. Gần đây tôi hay dùng Trình tạo mật khẩu của ToolCraft. Nó chạy hoàn toàn trong trình duyệt của bạn, điều này hoàn hảo để duy trì các tiêu chuẩn bảo mật mà không để dữ liệu nhạy cảm chạm vào máy chủ của người khác.

Related Error Notes