Docker ได้รับความนิยมมากขึ้นเรื่อยๆ ด้วยความสามารถในการสร้าง ปรับใช้ และเรียกใช้แอปพลิเคชันโดยใช้คอนเทนเนอร์อย่างง่ายดาย คอนเทนเนอร์อนุญาตให้นักพัฒนาทำแพ็กเกจแอปพลิเคชันที่มีไลบรารีและการพึ่งพาทั้งหมดก่อนที่จะปรับใช้เป็นแพ็กเกจเดียว กำลังติดตั้ง นักเทียบท่าบน Linux นั้นค่อนข้างง่าย สิ่งที่คุณต้องทำคือเรียกใช้คำสั่งสองสามคำสั่งใน Terminal เท่านี้ก็เรียบร้อย
อย่างไรก็ตาม ผู้ใช้ทุกคนอาจไม่เหมือนกัน แม้ว่าจะติดตั้งสำเร็จแล้วก็ตาม ข้อผิดพลาดที่เกิดขึ้นบ่อยที่สุดอย่างหนึ่งคือ ไม่สามารถเชื่อมต่อกับ Docker daemon ที่ (unix:///var/run/docker.sock Docker daemon ทำงานอยู่หรือไม่) ข้อผิดพลาดนี้อาจเกิดขึ้นได้เมื่อเรียกใช้คำสั่งต่างๆ ของนักเทียบท่า เช่น การเรียกใช้นักเทียบท่า, ข้อมูลนักเทียบท่า, การดึงนักเทียบท่า, การหยุดนักเทียบท่า ฯลฯ
สาเหตุของข้อผิดพลาด:ไม่สามารถเชื่อมต่อกับ Docker Daemon ได้
หลังจากได้รับการร้องเรียนจากนักพัฒนาจำนวนมาก เราจึงตัดสินใจลงลึกและคิดหาวิธีแก้ไขที่มีประสิทธิภาพ สาเหตุบางประการที่ทำให้เกิดข้อผิดพลาดนี้ ได้แก่:
- Docker daemon ไม่ได้ กำลังทำงาน .
- Docker ไม่ ปิดเครื่อง อย่างหมดจด
- ขาด สิทธิ์รูท เพื่อเริ่มบริการนักเทียบท่า
เมื่อคุณมีความเข้าใจพื้นฐานเกี่ยวกับสาเหตุของปัญหาแล้ว มาดูวิธีแก้ปัญหาต่างๆ ที่มีให้สำหรับคุณ
โซลูชันที่ 1:เริ่มบริการ Docker ด้วย systemctl
หากคุณเพิ่งทำการติดตั้งใหม่ของ Docker บน Ubuntu หรือรีบูตพีซีของคุณ มีโอกาสสูงที่บริการ Docker คือ ไม่ทำงาน . Docker daemon (dockerd) คือบริการระบบสำหรับนักเทียบท่า บริการนี้จัดการอ็อบเจ็กต์ Docker ต่างๆ เช่น รูปภาพ คอนเทนเนอร์ เครือข่าย และโวลุ่ม และรับฟังคำขอ Docker API
คำสั่ง Systemctl มาแทนที่ระบบ SysV init เก่า และจัดการบริการ systemd ทำงานบนระบบลินุกซ์ หากคุณไม่มี systemctl ในระบบ ไม่ต้องกังวล ใช้บริการบริการ คำสั่งตามที่อธิบายไว้ด้านล่าง
หมายเหตุ: วิธีนี้ใช้ได้เฉพาะกับผู้ใช้ที่ติดตั้ง Docker ด้วยตัวจัดการแพ็คเกจ APT หากคุณติดตั้ง Docker ผ่าน SNAP อ้างถึง โซลูชัน 5 ด้านล่าง
- เปิดเทอร์มินัล และรันคำสั่งแรก – unmask docker .
sudo systemctl unmask docker
หากเราพยายามเริ่มบริการนักเทียบท่าเมื่อปิดบังนักเทียบท่า เราอาจพบข้อผิดพลาด 'ล้มเหลวในการเริ่ม docker.service:หน่วยถูกปิดบัง' มาสก์ถือได้ว่าเป็นการปิดใช้งานเวอร์ชันที่มีประสิทธิภาพมากขึ้น เมื่อไฟล์หน่วยถูกปิดบัง หน่วยจะเชื่อมโยงกับ 'dev/null' คุณสามารถแสดงรายการสถานะของไฟล์หน่วยทั้งหมดด้วยคำสั่ง – '$ systemctl list-unit-files '
2. เมื่อหน่วยเทียบท่าเปิดโปง เราสามารถ เริ่มนักเทียบท่า ภูต ด้วยคำสั่ง systemctl นักเทียบท่า ภูต จัดการอ็อบเจ็กต์นักเทียบท่า เช่น คำขออิมเมจ คอนเทนเนอร์ และ Docker API ดำเนินการคำสั่งด้านล่างบนบรรทัดคำสั่ง
systemctl start docker
3. เพื่อ ยืนยัน บริการนักเทียบท่าทำงานอยู่หรือไม่ . เราจะใช้ สถานะ systemctl คำสั่งซึ่งแสดงสถานะปัจจุบันของบริการเฉพาะ ดำเนินการคำสั่งด้านล่างบนเทอร์มินัลของคุณ
systemctl status docker
จากภาพด้านบน จะเห็นว่า นักเทียบท่าทำงานอยู่ .
วิธีแก้ปัญหา 2:ทำความสะอาด 'Failed Docker Pull' และเริ่มบริการ Docker
มีหลายกรณีที่คุณอาจปิด Docker โดยไม่คาดคิดขณะดึงคอนเทนเนอร์ สถานการณ์ดังกล่าวจะปกปิด docker.service และ docker .socket ไฟล์. Docker.socket เป็นไฟล์ที่ตั้งอยู่ที่ '/var/run/docker.sock' และใช้เพื่อสื่อสารกับ Docker daemon เราจะต้องเปิดโปง ไฟล์สองหน่วย – docker .service และ docker.daemon ก่อน กำลังดำเนินการ เพื่อ เริ่มนักเทียบท่า
- เปิดตัว เทอร์มินัล และดำเนินการคำสั่ง ด้านล่าง:
systemctl unmask docker.service systemctl unmask docker.socket systemctl start docker.service
หากคุณยังคงพบข้อผิดพลาดแม้หลังจากรันคำสั่งด้านล่างแล้ว เราจะต้องลบ ไฟล์ใน คอนเทนเนอร์ ไดเร็กทอรีก่อนเริ่ม Docker อีกครั้ง Containerd เป็นฟีเจอร์ที่นำมาใช้ใน Docker 1.11 และใช้เพื่อจัดการวงจรชีวิตของอิมเมจ Docker
2. เปิด Terminal และรันคำสั่งด้านล่าง ตรวจสอบให้แน่ใจว่าคุณรู้ รหัสผ่านรูท เนื่องจากเราต้องการสิทธิ์ระดับสูงเพื่อดำเนินการคำสั่ง
sudo su service docker stop cd /var/run/docker/libcontainerd rm -rf containerd/* rm -f docker-containerd.pid service docker start
โซลูชัน 3:เริ่มบริการ Dockerd (Docker Daemon)
Dockerd คือ Docker daemon ซึ่งรับฟัง Docker API และจัดการอ็อบเจ็กต์ Docker ต่างๆ สามารถใช้ Dockerd แทนคำสั่ง $ systemctl start docker ' ซึ่งใช้เพื่อเริ่ม Docker daemon ด้วย
- เปิด เทอร์มินัล และ เริ่มเทียบท่า โดยดำเนินการคำสั่งด้านล่าง:
sudo dockerd
โซลูชันที่ 4:เริ่ม Docker ด้วยคำสั่งบริการ
หากคุณกำลังใช้ระบบเริ่มต้น SysV จากนั้นคำสั่ง systemctl จะไม่ทำงานสำหรับคุณ เราจะต้องใช้ คำสั่งบริการ เพื่อ เริ่ม docker daemon .
- เปิด Terminal และ ดำเนินการ คำสั่งด้านล่าง:
sudo service --status-all sudo service docker start
โซลูชันที่ 5:เริ่มบริการ Docker ด้วย Snap
หากคุณติดตั้ง Docker ด้วย Snap package manager คุณจะต้องใช้คำสั่ง snap เพื่อจัดการ docker daemon
โดยทั่วไป Snap จะจัดการบริการของตนโดยอัตโนมัติ อย่างไรก็ตาม ในสถานการณ์เช่นข้อผิดพลาดนี้ จะต้องมีการแทรกแซงโดยเจ้าหน้าที่ อาร์กิวเมนต์บางตัวที่คุณสามารถใช้กับคำสั่ง snap ได้แก่ หยุด เริ่ม และรีสตาร์ท ในกรณีของเรา เราจะใช้พารามิเตอร์เริ่มต้น
- เปิด Terminal และรันคำสั่งด้านล่างเพื่อ เริ่ม Docker .
sudo snap start docker
2. ดำเนินการคำสั่งด้านล่างเพื่อ ยืนยัน ว่า บริการ Docker เริ่มต้นขึ้นหรือไม่
sudo snap services
ที่จะ แสดงรายการ บริการสแนปที่ทำงานอยู่ทั้งหมด .
หากคำสั่งข้างต้นใช้ไม่ได้ผล ให้ลองเชื่อมต่อ docker:home plug เนื่องจากไม่ได้เชื่อมต่ออัตโนมัติโดยค่าเริ่มต้น เมื่อเสร็จแล้ว เริ่ม บริการนักเทียบท่า .
3. เปิด Terminal และเรียกใช้คำสั่งด้านล่าง:
sudo snap connect docker:home :home sudo snap start docker
โซลูชันที่ 6:เริ่ม Docker สำหรับผู้ใช้ที่ไม่มีรูท Privileges
ข้อผิดพลาดอาจเกิดขึ้นเนื่องจากไม่มีสิทธิ์ยกระดับ และผู้ใช้ไม่มีสิทธิ์เข้าถึง 'unix:///var/run/docker.sock' โชคดีที่มีวิธีแก้ไขปัญหาชั่วคราว เราจะส่งออกตัวแปร Docker Host ไปยัง localhost ผ่านพอร์ต 2375
- เปิด Terminal และเรียกใช้คำสั่งด้านล่าง:
export DOCKER_HOST=tcp://localhost:2375
โซลูชัน 7:ติดตั้ง Docker ใหม่
หากวิธีแก้ปัญหาข้างต้นไม่สามารถแก้ไขข้อผิดพลาดได้ มีโอกาสสูงที่คุณอาจมีข้อผิดพลาดในการติดตั้ง หากต้องการติดตั้ง Docker ในระบบ Linux อย่างถูกต้อง ให้ทำตามขั้นตอนจากเว็บไซต์ทางการของ Docker