Cách khắc phục lỗi Docker 'invalid reference format'

beginner🐳 Docker2026-07-16| Docker Engine (Mọi phiên bản), Linux, macOS, Windows (PowerShell/CMD/WSL2)

Error Message

invalid reference format
#docker#devops#troubleshooting#docker-image#syntax

Kịch bản lỗiBạn nhấn Enter cho một lệnh Docker và mong đợi thanh tiến trình xuất hiện. Thay vào đó, bạn nhận được một dòng thông báo từ chối ngắn gọn: invalid reference format. Điều này thường xảy ra khi thực hiện lệnh docker pull, run, hoặc build.

docker pull My-Awesome-Image:latest
# Kết quả: invalid reference format

Docker cực kỳ khắt khe về ngữ pháp đặt tên. Chỉ cần một khoảng trắng đặt sai chỗ, một chữ hoa vô tình, hoặc một ký tự lạ trong biến shell cũng sẽ kích hoạt lỗi này. Đây là cách Docker thông báo rằng nó không thể phân tích cú pháp địa chỉ image mà bạn đã cung cấp.

Tại sao lỗi này xảy raMột tham chiếu Docker tiêu chuẩn tuân theo cấu trúc nghiêm ngặt: [REGISTRY/][NAMESPACE/]REPOSITORY[:TAG|@DIGEST]. Nếu bạn phá vỡ cấu trúc này, lệnh sẽ thất bại. Hầu hết các nhà phát triển gặp lỗi này do một vài sai sót cụ thể:

  • Chữ in hoa: Mặc dù tag về mặt kỹ thuật có thể sử dụng chữ hoa, nhưng tên repository bắt buộc phải viết thường hoàn toàn.- Dấu gạch chéo ở cuối: Thêm dấu / vào cuối tên image khiến Docker nghĩ rằng bạn đã để trống phần tên.- Ký tự không hợp lệ: Sử dụng các ký tự như $, %, hoặc & trong tên image.- Biến trống (Ghost variables): Tham chiếu đến một biến shell đang trống hoặc null, để lại một dấu hai chấm hoặc dấu gạch chéo lơ lửng.- Nhầm lẫn cổng (Port): Đặt dấu hai chấm sai chỗ khi kết nối với một registry riêng tư như localhost:5000.## Cách khắc phục nhanh### 1. Chuyển tất cả thành chữ thườngĐây là nguyên nhân phổ biến nhất. Tên repository của Docker không cho phép chữ in hoa. Nếu dự án của bạn tên là Web-App, Docker sẽ từ chối nó.
# SAI
docker build -t MyProject:v1.0 .

# ĐÚNG
docker build -t myproject:v1.0 .

2. Xử lý các biến shell trốngTrong các đường ống CI/CD như GitHub Actions hoặc GitLab CI, chúng ta thường sử dụng biến để đánh số phiên bản. Nếu $APP_VERSION không được thiết lập, lệnh docker pull my-app:$APP_VERSION sẽ trở thành docker pull my-app:, đây là định dạng không hợp lệ. Hãy luôn cung cấp giá trị mặc định để ngăn chặn điều này.

# Nếu $TAG trống, lệnh này sẽ lỗi
docker pull my-service:$TAG

# Khắc phục: Sử dụng giá trị mặc định (VD: 'latest')
docker pull my-service:${TAG:-latest}

3. Làm sạch URL của RegistryKhi bạn sao chép URL từ trình duyệt hoặc bảng điều khiển đám mây (như AWS ECR hoặc Azure ACR), bạn có thể vô tình bao gồm dấu gạch chéo ở cuối. Docker yêu cầu chuỗi kết thúc bằng tên image, không phải đường dẫn thư mục.

# SAI (Lưu ý dấu gạch chéo ở cuối)
docker pull my-registry.azurecr.io/my-app/

# ĐÚNG
docker pull my-registry.azurecr.io/my-app

4. Sửa cổng cho Registry riêng tưKhi sử dụng registry nội bộ trên cổng 5000, bạn phải sử dụng dấu gạch chéo để ngăn cách host:port với tên image. Bạn không thể sử dụng nhiều dấu hai chấm liên tiếp cho tên repository.

# SAI
docker pull localhost:5000:my-image:v1

# ĐÚNG
docker pull localhost:5000/my-image:v1

Quy tắc đặt tên tốt nhất### Tuân thủ bộ ký tự tiêu chuẩnĐể giữ cho quy trình làm việc ổn định, hãy giới hạn tên image của bạn trong một bộ ký tự cụ thể. Chỉ sử dụng chữ cái thường (a-z), chữ số (0-9) và các dấu phân cách cơ bản như dấu chấm (.), dấu gạch dưới (_), hoặc dấu gạch ngang (-).

Không bao giờ bắt đầu hoặc kết thúc tên bằng dấu phân cách. Ví dụ: -my-image hoặc my-image_ đều không hợp lệ và sẽ làm hỏng các script của bạn.

Sử dụng dấu ngoặc kép cho biếnShell có thể khó dự đoán. Nếu một biến chứa khoảng trắng hoặc ký tự ẩn, nó có thể chia lệnh Docker của bạn thành nhiều phần. Hãy luôn bao bọc các tham chiếu image trong dấu ngoặc kép trong các script.

# Cách viết script an toàn hơn
FULL_IMAGE_NAME="${REGISTRY_URL}/${PROJECT_ID}/api-server:1.2.3"
docker pull "$FULL_IMAGE_NAME"

Kiểm tra tệp Docker ComposeTrong tệp docker-compose.yml, hãy đảm bảo dòng image: không có khoảng trắng thừa ở đầu. YAML rất nhạy cảm với việc thụt lề. Một ký tự tab ẩn hoặc một khoảng trắng thừa sau tên image có thể khiến bộ phân tích cú pháp thất bại với lỗi reference.

Cách xác minh bản sửa lỗiKhi bạn nghĩ rằng mình đã sửa xong định dạng, hãy chạy lệnh docker inspect với tên đó. Nếu định dạng cuối cùng đã đúng, Docker sẽ cố gắng tìm kiếm nó. Nó có thể báo "No such object," nhưng đó thực sự là tin tốt—điều đó có nghĩa là định dạng đã hợp lệ, ngay cả khi image chưa có trên máy của bạn.

docker inspect my-corrected-image:v1

Nếu bạn vẫn thấy lỗi, hãy tìm các ký tự ẩn. Điều này thường xảy ra khi sao chép các lệnh từ trình soạn thảo văn bản giàu định dạng (rich-text) hoặc Slack. Hãy thử nhập lại lệnh theo cách thủ công trong một cửa sổ terminal sạch để loại trừ các ký tự không in được.

Related Error Notes