ไม่สามารถเชื่อมต่อกับ Docker Daemon ที่ "unix: ///var/run/docker.sock"

Docker ได้รับความนิยมมากขึ้นเรื่อยๆ ด้วยความสามารถในการสร้าง ปรับใช้ และเรียกใช้แอปพลิเคชันโดยใช้คอนเทนเนอร์อย่างง่ายดาย คอนเทนเนอร์อนุญาตให้นักพัฒนาทำแพ็กเกจแอปพลิเคชันที่มีไลบรารีและการพึ่งพาทั้งหมดก่อนที่จะปรับใช้เป็นแพ็กเกจเดียว กำลังติดตั้ง นักเทียบท่าบน Linux นั้นค่อนข้างง่าย สิ่งที่คุณต้องทำคือเรียกใช้คำสั่งสองสามคำใน Terminal เท่านี้ก็เรียบร้อย

อย่างไรก็ตาม ผู้ใช้ทุกคนอาจไม่เหมือนกัน แม้ว่าจะติดตั้งสำเร็จแล้วก็ตาม หนึ่งในข้อผิดพลาดที่เกิดขึ้นบ่อยที่สุดคือ:ไม่สามารถเชื่อมต่อกับ Docker daemon ที่ (unix:///var/run/docker.sock docker daemon ทำงานอยู่หรือไม่) ข้อผิดพลาดนี้อาจเกิดขึ้นได้เมื่อรันคำสั่งต่างๆ ของนักเทียบท่า เช่น การเรียกใช้นักเทียบท่า, ข้อมูลนักเทียบท่า, การดึงนักเทียบท่า, การหยุดนักเทียบท่า ฯลฯ

อะไรทำให้เกิดข้อผิดพลาด: ไม่สามารถเชื่อมต่อกับ Docker Daemon ได้

หลังจากได้รับการร้องเรียนจากนักพัฒนาจำนวนมาก เราจึงตัดสินใจลงลึกและคิดหาวิธีแก้ไขที่มีประสิทธิภาพ สาเหตุบางประการที่ทำให้เกิดข้อผิดพลาดนี้ ได้แก่:

  • Docker daemon ไม่ใช่วิ่ง.
  • นักเทียบท่าไม่ได้ปิดตัวลง อย่างหมดจด
  • ขาดสิทธิ์รูท เพื่อเริ่มบริการนักเทียบท่า

เมื่อคุณมีความเข้าใจพื้นฐานเกี่ยวกับสาเหตุของปัญหาแล้วมาดูวิธีแก้ปัญหาต่างๆที่มีให้สำหรับคุณ

โซลูชันที่ 1: เริ่มบริการ Docker ด้วย systemctl

หากคุณเพิ่งเสร็จสิ้นการติดตั้งใหม่ของ Docker บน Ubuntu หรือรีบูตพีซีของคุณ มีโอกาสสูงที่บริการนักเทียบท่า คือไม่ได้ทำงาน. Docker daemon (dockerd) คือบริการระบบสำหรับนักเทียบท่า บริการนี้จัดการอ็อบเจ็กต์ Docker ต่างๆ เช่น รูปภาพ คอนเทนเนอร์ เครือข่าย และวอลุ่ม และรับฟังคำขอ Docker API

คำสั่ง Systemctl มาแทนที่ระบบ SysV init เก่าและมันจัดการบริการ systemd ทำงานบนระบบลินุกซ์ หากคุณไม่มี systemctl ในระบบของคุณ ไม่ต้องกังวล ใช้บริการ คำสั่งตามที่อธิบายไว้ด้านล่าง

บันทึก: วิธีนี้ใช้ได้กับผู้ใช้ที่ติดตั้ง Docker ด้วย APT package manager เท่านั้น หากคุณติดตั้ง Docker ผ่านสแนป, อ้างถึงโซลูชัน 5ด้านล่าง

  1. เปิดเทอร์มินัล และดำเนินการคำสั่งแรก -เปิดโปงนักเทียบท่า.
sudo systemctl เปิดโปงนักเทียบท่า

หากเราพยายามเริ่มบริการนักเทียบท่าเมื่อปิดบังนักเทียบท่า เราอาจพบข้อผิดพลาด 'ล้มเหลวในการเริ่ม docker.service: หน่วยถูกปิดบัง' มาสก์ถือได้ว่าเป็นการปิดใช้งานเวอร์ชันที่มีประสิทธิภาพมากขึ้น เมื่อไฟล์หน่วยถูกปิดบัง หน่วยจะเชื่อมโยงกับ 'dev/null' คุณสามารถแสดงรายการสถานะของไฟล์หน่วยทั้งหมดด้วยคำสั่ง - '$ systemctl list-unit-files

2. เมื่อ docker unit เป็น เปิดโปง, เราทำได้ เริ่มนักเทียบท่าภูต ด้วยคำสั่ง systemctl นักเทียบท่า ภูต จัดการอ็อบเจ็กต์นักเทียบท่า เช่น คำขออิมเมจ คอนเทนเนอร์ และ Docker API ดำเนินการคำสั่งด้านล่างบนบรรทัดคำสั่ง

systemctl start docker

3. ถึง ตรวจสอบ ไม่ว่าจะเป็นบริการนักเทียบท่า กำลังใช้งานและทำงานอยู่. เราจะใช้สถานะ systemctl คำสั่งซึ่งแสดงสถานะปัจจุบันของบริการเฉพาะ ดำเนินการคำสั่งด้านล่างบนเทอร์มินัลของคุณ

นักเทียบท่าสถานะ systemctl

จากภาพด้านบนจะเห็นว่านักเทียบท่าเปิดใช้งานและทำงานอยู่.

โซลูชันที่ 2: ทำความสะอาด 'Failed Docker Pull' และเริ่มบริการ Docker

มีบางกรณีที่คุณอาจปิด Docker โดยไม่คาดคิดขณะดึงคอนเทนเนอร์ สถานการณ์ดังกล่าวจะปกปิด docker.service และนักเทียบท่า .socketไฟล์. Docker.socket เป็นไฟล์ที่ตั้งอยู่ที่ '/var/run/docker.sock' และใช้เพื่อสื่อสารกับ Docker daemon เราจะต้องเปิดโปง ไฟล์สองหน่วย – docker .service และ docker.daemon beforeกำลังดำเนินการ ถึงเริ่มนักเทียบท่า

  1. เปิดตัวเทอร์มินอล และดำเนินการคำสั่ง ด้านล่าง:
systemctl เปิดโปง docker.service systemctl เปิดโปง docker.socket systemctl เริ่ม docker.service

หากคุณยังคงพบข้อผิดพลาดแม้หลังจากรันคำสั่งด้านล่างแล้ว เราจะต้อง ลบ ไฟล์ใน Containerd ไดเร็กทอรีก่อนเริ่ม Docker อีกครั้ง Containerd เป็นคุณลักษณะที่นำมาใช้ใน Docker 1.11 และใช้เพื่อจัดการวงจรชีวิตของภาพ Docker

2. เปิด Terminal และรันคำสั่งด้านล่าง รับรองว่าคุณจะรู้ว่า รหัสผ่านรูท เนื่องจากเราต้องการสิทธิ์ระดับสูงเพื่อดำเนินการคำสั่ง

sudo su service docker หยุด 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 เริ่มนักเทียบท่า' ซึ่งใช้เพื่อเริ่ม Docker daemon ด้วย

  1. เปิด เทอร์มินอล และ เริ่มเทียบท่า โดยดำเนินการคำสั่งด้านล่าง:
sudo dockerd

โซลูชันที่ 4: เริ่ม Docker ด้วยคำสั่งบริการ

หากคุณกำลังใช้ไฟล์ ระบบเริ่มต้น SysVจากนั้นคำสั่ง systemctl จะไม่ทำงานสำหรับคุณ เราจะต้องใช้ คำสั่งบริการ ถึง เริ่ม docker daemon.

  1. เปิด Terminal และ ดำเนินการ คำสั่งด้านล่าง:
บริการ sudo --status-all sudo service docker start

โซลูชันที่ 5: เริ่มบริการ Docker ด้วย Snap

หากคุณติดตั้ง Docker ด้วยSnap package managerคุณจะต้องใช้คำสั่ง snap เพื่อจัดการ docker daemon

โดยทั่วไป Snap จะจัดการบริการของตนโดยอัตโนมัติ อย่างไรก็ตาม ในสถานการณ์เช่นข้อผิดพลาดนี้ จะต้องมีการแทรกแซงโดยเจ้าหน้าที่ อาร์กิวเมนต์บางตัวที่คุณสามารถใช้กับคำสั่ง snap ได้แก่ หยุด เริ่ม และรีสตาร์ท ในกรณีของเรา เราจะใช้พารามิเตอร์เริ่มต้น

  1. เปิด Terminal และรันคำสั่งด้านล่างเพื่อเริ่ม Docker.
sudo snap start นักเทียบท่า

2. ดำเนินการคำสั่งด้านล่างเพื่อ ตรวจสอบ ไม่ว่าจะเป็น เริ่มบริการนักเทียบท่า

sudo snap services

นั่นจะ รายการ วิ่งทั้งหมด snap services.

หากคำสั่งข้างต้นไม่ได้ผลสำหรับคุณให้ลอง การเชื่อมต่อนักเทียบท่า:ปลั๊กบ้านhome เนื่องจากไม่ได้เชื่อมต่ออัตโนมัติโดยค่าเริ่มต้น เมื่อเสร็จแล้ว เริ่ม บริการนักเทียบท่า.

3. เปิด Terminal และเรียกใช้คำสั่งด้านล่าง:

sudo snap connect docker:home :home sudo snap start docker

โซลูชันที่ 6: เริ่ม Docker สำหรับผู้ใช้ที่ไม่มีรูท Pริวิเลจ

ข้อผิดพลาดอาจเกิดขึ้นเนื่องจาก ขาดอภิสิทธิ์อันสูงส่ง และผู้ใช้ไม่มีสิทธิ์เข้าถึง "unix: ///var/run/docker.sock" โชคดีที่มีวิธีแก้ปัญหาชั่วคราว เราจะส่งออกตัวแปร Docker Host ไปยัง localhost ผ่านพอร์ต 2375

  1. เปิด Terminal และเรียกใช้คำสั่งด้านล่าง:
ส่งออก DOCKER_HOST=tcp://localhost:2375

โซลูชันที่ 7: ติดตั้ง Docker ใหม่

หากวิธีแก้ปัญหาข้างต้นไม่สามารถแก้ไขข้อผิดพลาดได้ มีโอกาสสูงที่คุณอาจมีข้อผิดพลาดในการติดตั้ง หากต้องการติดตั้ง Docker ในระบบ Linux อย่างถูกต้อง ให้ทำตามขั้นตอนจากเว็บไซต์ทางการของ Docker

Facebook Twitter Google Plus Pinterest