Computer >> คอมพิวเตอร์ >  >> การแก้ไขปัญหา >> Linux

[แก้ไข] ไม่สามารถเชื่อมต่อกับ Docker Daemon ที่ 'unix:///var/run/docker.sock'

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

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

อย่างไรก็ตาม ผู้ใช้ทุกคนอาจไม่เหมือนกัน แม้ว่าจะติดตั้งสำเร็จแล้วก็ตาม ข้อผิดพลาดที่เกิดขึ้นบ่อยที่สุดอย่างหนึ่งคือ ไม่สามารถเชื่อมต่อกับ 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  ด้านล่าง

  1. เปิดเทอร์มินัล และรันคำสั่งแรก – unmask docker .
sudo systemctl unmask docker

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

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

systemctl start docker
[แก้ไข] ไม่สามารถเชื่อมต่อกับ Docker Daemon ที่  unix:///var/run/docker.sock

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

systemctl status docker
[แก้ไข] ไม่สามารถเชื่อมต่อกับ Docker Daemon ที่  unix:///var/run/docker.sock

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

วิธีแก้ปัญหา 2:ทำความสะอาด 'Failed Docker Pull' และเริ่มบริการ Docker

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

  1. เปิดตัว เทอร์มินัล และดำเนินการคำสั่ง ด้านล่าง:
systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service
[แก้ไข] ไม่สามารถเชื่อมต่อกับ Docker Daemon ที่  unix:///var/run/docker.sock

หากคุณยังคงพบข้อผิดพลาดแม้หลังจากรันคำสั่งด้านล่างแล้ว เราจะต้องลบ ไฟล์ใน คอนเทนเนอร์ ไดเร็กทอรีก่อนเริ่ม 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
[แก้ไข] ไม่สามารถเชื่อมต่อกับ Docker Daemon ที่  unix:///var/run/docker.sock

โซลูชัน 3:เริ่มบริการ Dockerd (Docker Daemon)

Dockerd คือ Docker daemon ซึ่งรับฟัง Docker API และจัดการอ็อบเจ็กต์ Docker ต่างๆ สามารถใช้ Dockerd แทนคำสั่ง $ systemctl start docker ' ซึ่งใช้เพื่อเริ่ม Docker daemon ด้วย

  1. เปิด เทอร์มินัล และ เริ่มเทียบท่า โดยดำเนินการคำสั่งด้านล่าง:
sudo dockerd
[แก้ไข] ไม่สามารถเชื่อมต่อกับ Docker Daemon ที่  unix:///var/run/docker.sock

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

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

  1. เปิด Terminal และ ดำเนินการ คำสั่งด้านล่าง:
sudo service --status-all
sudo service docker start
[แก้ไข] ไม่สามารถเชื่อมต่อกับ Docker Daemon ที่  unix:///var/run/docker.sock

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

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

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

  1. เปิด Terminal และรันคำสั่งด้านล่างเพื่อ เริ่ม Docker .
sudo snap start docker
[แก้ไข] ไม่สามารถเชื่อมต่อกับ Docker Daemon ที่  unix:///var/run/docker.sock

2. ดำเนินการคำสั่งด้านล่างเพื่อ ยืนยัน ว่า บริการ Docker เริ่มต้นขึ้นหรือไม่

sudo snap services

ที่จะ แสดงรายการ บริการสแนปที่ทำงานอยู่ทั้งหมด .

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

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

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

sudo snap connect docker:home :home
sudo snap start docker
[แก้ไข] ไม่สามารถเชื่อมต่อกับ Docker Daemon ที่  unix:///var/run/docker.sock

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

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

  1. เปิด Terminal และเรียกใช้คำสั่งด้านล่าง:
export DOCKER_HOST=tcp://localhost:2375
[แก้ไข] ไม่สามารถเชื่อมต่อกับ Docker Daemon ที่  unix:///var/run/docker.sock

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

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


No