Định dạng tham chiếu không hợp lệ của Docker

Dinh Dang Tham Chieu Khong Hop Le Cua Docker



Khi làm việc với Docker image hoặc Dockerfile, bạn có thể gặp phải lỗi “định dạng tham chiếu không hợp lệ”.

Trong hướng dẫn này, chúng ta sẽ tìm hiểu ý nghĩa của lỗi này, lý do nó xảy ra và cách bạn có thể giải quyết nó trong quá trình sử dụng Docker của mình.

Tham chiếu hình ảnh trong Docker là gì?

Trong Docker, tham chiếu hình ảnh đề cập đến phương pháp xác định và định vị hình ảnh Docker cụ thể trong sổ đăng ký Docker (Docker Hub) hoặc máy chủ Docker cục bộ.







Theo mặc định, tham chiếu hình ảnh bao gồm hai thành phần chính:



Kho lưu trữ - Phần đầu tiên xác định kho lưu trữ cho hình ảnh mục tiêu. Đây là đơn vị tổ chức cấp cao nhất cho Docker image, chủ yếu được sử dụng để đại diện cho tổ chức hoặc cá nhân quản lý image. Ví dụ: bạn có thể tìm thấy một hình ảnh có tên Microsoft/SQL-server. Trong trường hợp này, phần đầu tiên thể hiện tổ chức duy trì hình ảnh.



Thẻ – Phần thứ hai của hình ảnh là nhãn được liên kết với phiên bản hoặc biến thể cụ thể của hình ảnh trong kho lưu trữ. Thẻ hình ảnh có thể đại diện cho các phiên bản khác nhau của cùng một hình ảnh, các bản phát hành khác nhau hoặc khả năng tương thích khác nhau. Ví dụ: trong hình ảnh nginx:latest trong đó thẻ mới nhất đề cập đến phiên bản mới nhất của hình ảnh Nginx.





Khi chỉ định hình ảnh trong lệnh Dockerfile hoặc docker, tên hình ảnh phải tuân theo các quy tắc đặt tên sau:

  • Tên kho lưu trữ phải là chữ thường.
  • Kho lưu trữ cũng có thể chứa các chữ cái, số, dấu gạch nối (-), dấu gạch dưới (_) hoặc dấu gạch chéo lên (/) để biểu thị tổ chức hoặc nhóm trong sổ đăng ký.
  • Không được có ký tự khoảng trắng (dấu cách hoặc tab) trong tên hình ảnh.

Docker Định dạng tham chiếu không hợp lệ

Khi bạn gặp lỗi “invalid reference format” khi chạy lệnh Dockerfile hoặc Docker, điều đó có nghĩa là tên của bạn chưa tuân thủ các quy tắc trên.



Một ví dụ như được hiển thị:

$ docker kéo BusyBox

Nếu chúng ta chạy lệnh trên, nó sẽ trả về lỗi như hình:

không hợp lệ thẩm quyền giải quyết định dạng: tên kho lưu trữ phải là chữ thường

Trong trường hợp này, nó cho chúng ta biết rằng định dạng tên hình ảnh không chính xác vì tên hình ảnh phải luôn là chữ thường.

Cách khắc phục lỗi định dạng tham chiếu không hợp lệ của Docker

Như bạn có thể đoán, phương pháp đầu tiên là đảm bảo định dạng tham chiếu hình ảnh là chính xác. Điều này bao gồm việc xác minh rằng tên hình ảnh là hợp lệ.

Ví dụ, trong lệnh trên, chúng ta có thể sửa lỗi bằng cách chỉ định tên hình ảnh là:

$ sudo docker pull busybox:mới nhất

Trong trường hợp này, lệnh sẽ lấy phiên bản mới nhất của hình ảnh Busybox.

Phương pháp 2 - Tách các lệnh Docker dài

Trong một số trường hợp khác, bạn có thể gặp phải lỗi “định dạng tham chiếu không hợp lệ” khi chạy lệnh Docker dài.

Trong trường hợp như vậy, chia lệnh thành nhiều dòng là một cách làm tốt. Phương pháp phân tách lệnh sẽ phụ thuộc vào shell và hệ thống của bạn.

  • Tuy nhiên, đối với Bash shell, hãy sử dụng ký tự thoát nhiều dòng hoặc dấu gạch chéo ngược (\).
  • Đối với PowerShell, bạn có thể sử dụng ký tự backtick (`).
  • Cuối cùng, nếu bạn đang sử dụng Dấu nhắc Lệnh, bạn có thể sử dụng ký tự dấu mũ như ^

Ví dụ: trên Bash, hãy chạy lệnh dưới dạng:

$ sudo xây dựng docker \

-Nó \

hộp bận \

sh

Trên PowerShell, bạn có thể chạy lệnh như sau:

$ sudo docker xây dựng `

-Nó `

hộp bận rộn `

sh

Và cuối cùng, nếu bạn đang ở trên Dấu nhắc Lệnh, hãy sử dụng lệnh như được hiển thị:

$ sudo xây dựng docker ^

-Nó ^

hộp bận rộn ^

sh

Phương pháp 3 – đường dẫn ${pwd} AND $(pwd)

Một nguyên nhân phổ biến khác gây ra lỗi này là khi sử dụng biến ${pwd}. Điều này có thể gây ra xung đột, tùy thuộc vào loại shell mà bạn đang thực thi lệnh nói trên.

Trong trường hợp PowerShell, bạn cần sử dụng biến ${pwd} thay vì $(pwd).

Như bạn có thể đoán, trong trường hợp Bash, hãy sử dụng định dạng dấu ngoặc đơn thay vì đầu vào có dấu ngoặc nhọn là $(pwd).

Phần kết luận

Bài đăng này thảo luận về các nguyên nhân hàng đầu gây ra “định dạng tham chiếu không hợp lệ” khi làm việc với các lệnh Dockerfile hoặc docker. Chúng tôi cũng đã khám phá ba phương pháp chính mà bạn có thể sử dụng để khắc phục sự cố này.