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-1bằng region thực tế của bạn (ví dụ:eu-west-1). - Thay
123456789012bằ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

