ในบทช่วยสอนนี้ เราจะเรียนรู้ว่าข้อผิดพลาดนี้หมายถึงอะไร เหตุใดจึงเกิดขึ้น และคุณจะแก้ไขข้อผิดพลาดดังกล่าวในการใช้งาน Docker ได้อย่างไร
การอ้างอิงรูปภาพใน Docker คืออะไร
ใน Docker การอ้างอิงรูปภาพหมายถึงวิธีการระบุและค้นหารูปภาพ Docker เฉพาะภายในรีจิสทรี Docker (Docker Hub) หรือโฮสต์ Docker ในเครื่อง
ตามค่าเริ่มต้น การอ้างอิงรูปภาพจะประกอบด้วยองค์ประกอบหลัก 2 ส่วน:
พื้นที่เก็บข้อมูล – ส่วนแรกกำหนดพื้นที่เก็บข้อมูลสำหรับอิมเมจเป้าหมาย นี่คือหน่วยขององค์กรระดับบนสุดสำหรับอิมเมจ Docker ซึ่งส่วนใหญ่ใช้เพื่อเป็นตัวแทนขององค์กรหรือบุคคลที่จัดการอิมเมจ ตัวอย่างเช่น คุณสามารถค้นหารูปภาพชื่อ Microsoft/SQL-server ในกรณีนี้ ส่วนแรกแสดงถึงองค์กรที่ดูแลรักษาภาพลักษณ์
แท็ก – ส่วนที่สองของรูปภาพคือป้ายกำกับที่เกี่ยวข้องกับเวอร์ชันหรือรูปแบบเฉพาะของรูปภาพภายในพื้นที่เก็บข้อมูล แท็กรูปภาพสามารถแสดงถึงเวอร์ชันต่างๆ ของรูปภาพเดียวกัน รุ่นที่แตกต่างกัน หรือความเข้ากันได้ที่แตกต่างกัน ตัวอย่างเช่น ในรูปภาพของ nginx:latest โดยที่แท็กล่าสุดอ้างอิงถึงเวอร์ชันล่าสุดของรูปภาพ Nginx
เมื่อระบุรูปภาพในคำสั่ง Dockerfile หรือ docker ชื่อรูปภาพจะต้องเป็นไปตามกฎการตั้งชื่อต่อไปนี้:
- ชื่อที่เก็บควรเป็นตัวพิมพ์เล็ก
- ที่เก็บยังสามารถประกอบด้วยตัวอักษร ตัวเลข ขีดกลาง (-) ขีดล่าง (_) หรือเครื่องหมายทับ (/) เพื่อระบุองค์กรหรือการจัดกลุ่มภายในรีจิสทรี
- ไม่ควรมีอักขระช่องว่าง (ช่องว่างหรือแท็บ) ในชื่อรูปภาพ
รูปแบบการอ้างอิงนักเทียบท่าไม่ถูกต้อง
เมื่อคุณได้รับข้อผิดพลาด “รูปแบบการอ้างอิงที่ไม่ถูกต้อง” เมื่อเรียกใช้คำสั่ง Dockerfile หรือ Docker แสดงว่าชื่อของคุณไม่เป็นไปตามกฎข้างต้น
ตัวอย่างดังแสดง:
$ นักเทียบท่าดึง BusyBoxหากเรารันคำสั่งข้างต้น มันจะส่งคืนข้อผิดพลาดดังภาพ:
ไม่ถูกต้อง อ้างอิง รูปแบบ: ชื่อที่เก็บจะต้องเป็นตัวพิมพ์เล็ก
ในกรณีนี้ จะแจ้งเราว่ารูปแบบชื่อรูปภาพไม่ถูกต้อง เนื่องจากชื่อรูปภาพควรเป็นตัวพิมพ์เล็กเสมอ
วิธีแก้ไขข้อผิดพลาดรูปแบบการอ้างอิงที่ไม่ถูกต้องของ Docker
ดังที่คุณสามารถเดาได้ วิธีแรกคือตรวจสอบให้แน่ใจว่ารูปแบบการอ้างอิงรูปภาพนั้นถูกต้อง ซึ่งรวมถึงการตรวจสอบว่าชื่อรูปภาพนั้นถูกต้อง
ตัวอย่างเช่น ในคำสั่งข้างต้น เราสามารถแก้ไขข้อผิดพลาดได้โดยระบุชื่อรูปภาพเป็น:
$ ซูโดะ นักเทียบท่าดึง busybox: ล่าสุด
ในกรณีนี้ คำสั่งควรดึงอิมเมจ Busybox เวอร์ชันล่าสุด
วิธีที่ 2 - แยกคำสั่ง Long Docker
ในบางกรณี คุณอาจพบข้อผิดพลาด 'รูปแบบการอ้างอิงที่ไม่ถูกต้อง' เมื่อเรียกใช้คำสั่ง Docker แบบยาว
ในกรณีเช่นนี้ การแยกคำสั่งออกเป็นหลายบรรทัดถือเป็นแนวปฏิบัติที่ดี วิธีการแยกคำสั่งจะขึ้นอยู่กับเชลล์และระบบของคุณ
- อย่างไรก็ตาม สำหรับ Bash เชลล์ ให้ใช้อักขระหลีกหลายบรรทัดหรือแบ็กสแลช (\)
- สำหรับ PowerShell คุณสามารถใช้อักขระ backtick (`)
- สุดท้ายนี้ หากคุณอยู่ใน Command Prompt คุณสามารถใช้อักขระคาเร็ตเป็น ^ ได้
ตัวอย่างเช่น บน Bash ให้รันคำสั่งดังนี้:
$ ซูโดะ นักเทียบท่าสร้าง \-มัน \
กล่องยุ่ง \
ซ
บน PowerShell คุณสามารถเรียกใช้คำสั่งดังที่แสดง:
$ ซูโดะ สร้างนักเทียบท่า `-มัน `
กล่องยุ่ง `
ซ
และสุดท้าย หากคุณอยู่ใน Command Prompt ให้ใช้คำสั่งตามที่แสดง:
$ ซูโดะ นักเทียบท่าสร้าง ^-มัน ^
บ็อกซ์ บ็อกซ์ ^
ซ
วิธีที่ 3 - เส้นทาง ${pwd} และ $(pwd)
สาเหตุทั่วไปอีกประการหนึ่งของข้อผิดพลาดนี้คือเมื่อใช้ตัวแปร ${pwd} สิ่งนี้อาจทำให้เกิดข้อขัดแย้ง ขึ้นอยู่กับประเภทของเชลล์ที่คุณกำลังดำเนินการคำสั่งดังกล่าว
ในกรณีของ PowerShell คุณต้องใช้ตัวแปร ${pwd} แทน $(pwd)
ดังที่คุณสามารถเดาได้ ในกรณีของ Bash ให้ใช้รูปแบบวงเล็บแทนอินพุตที่มีเครื่องหมายปีกกาเป็น $(pwd)
บทสรุป
โพสต์นี้กล่าวถึงสาเหตุหลักของ “รูปแบบการอ้างอิงที่ไม่ถูกต้อง” เมื่อทำงานกับคำสั่ง Dockerfile หรือนักเทียบท่า นอกจากนี้เรายังสำรวจวิธีการหลักสามวิธีที่คุณสามารถใช้เพื่อแก้ไขปัญหานี้