Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การแก้ไขปัญหา >> Linux

การแก้ไขข้อผิดพลาด 'ไม่สามารถเชื่อมต่อกับ Docker Daemon' บน Linux

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

นักเทียบท่าจะออกกลุ่มผู้ใช้แยกต่างหากบนระบบ Linux และผู้ที่มีบัญชีผู้ใช้ที่ไม่ได้เพิ่มเข้าไปจะไม่สามารถเชื่อมต่อได้ โปรดทราบว่าการเพิ่มบัญชีผู้ใช้ในกลุ่ม Docker นั้นเทียบเท่ากับรูท เนื่องจาก daemon จะทำงานในฐานะผู้ใช้รูทเสมอ สิ่งนี้อาจเกิดขึ้นได้บนระบบเซิร์ฟเวอร์ Ubuntu แบบผู้ใช้คนเดียว แต่จะเป็นสิ่งที่ควรคำนึงถึงอย่างแน่นอนสำหรับผู้ที่ใช้งาน Docker บน Arch, Fedora หรือ Debian

วิธีที่ 1:การตรวจสอบสถานะบริการ Docker

แม้ว่าจะเกือบจะเป็นเช่นนั้น แต่คุณจะต้องตรวจสอบว่าบริการ Docker กำลังทำงานอยู่หรือไม่ ที่หน้าต่างเทอร์มินัล ให้เรียกใช้ systemctl status docker.service ในฐานะผู้ใช้ปกติ คุณควรได้รับข้อมูลบางอย่างเกี่ยวกับหมายเลข PID ของ Docker's daemon ที่ได้รับมอบหมาย หากไม่เป็นเช่นนั้น คุณจะต้องเริ่มบริการใหม่

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

วิธีที่ 2:การเพิ่มผู้ใช้ในกลุ่มนักเทียบท่า

เรียกใช้ ข้อมูลนักเทียบท่า จากบรรทัดคำสั่ง ซึ่งโดยปกติจะทำให้เกิดข้อผิดพลาด “ไม่สามารถเชื่อมต่อกับ Docker daemon” อีกครั้ง

หากเป็นกรณีนี้ คุณจะต้องเรียกใช้ sudo groupadd docker; sudo usermod -aG นักเทียบท่า $USER เพื่อเพิ่มตัวเองเข้ากลุ่มที่เหมาะสม หากเกิดข้อผิดพลาดเนื่องจากคุณไม่มี usermod คุณสามารถแก้ไขคำสั่งให้ทำงานเป็น sudo groupadd docker; sudo gpasswd - นักเทียบท่า $USER แต่โดยทั่วไปแล้วสิ่งนี้ไม่น่าจะเป็นปัญหา เนื่องจากลีนุกซ์รุ่นเชิงพาณิชย์ส่วนใหญ่ทำงานกับชุดเครื่องมือเดียวกัน ไม่ว่าในกรณีใด ให้เรียกใช้ newgrp docker เพื่อให้คุณสามารถเข้าสู่ระบบกลุ่มนักเทียบท่าใหม่ได้หากคุณยังไม่ได้ดำเนินการ

โปรดทราบว่าการดำเนินการนี้จะเพิ่มผู้ใช้ที่คุณเข้าสู่ระบบอยู่ในปัจจุบันเสมอ ซึ่งไม่น่าจะเป็นปัญหามากเกินไปในระบบของคนส่วนใหญ่ที่ไม่มีหลายบัญชีนอกเหนือจากผู้ใช้รายเดียวและบัญชีรูท เนื่องจากคุณมีสิทธิ์การเข้าถึงระดับผู้ดูแลระบบในขณะนี้ ให้รัน sudo chgrp docker /usr/bin docker; sudo chgrp นักเทียบท่า /var/run/docker.sock เพื่อแก้ไขการอนุญาตบนซ็อกเก็ตนักเทียบท่าและคำสั่ง โดยปกติแล้ว ไฟล์ซ็อกเก็ตจะเป็นของผู้ใช้รูทเท่านั้น ดังนั้นการดำเนินการนี้จะแก้ไขให้ถูกต้อง

หลังจากเรียกใช้แล้ว คุณไม่ควรมีปัญหาใดๆ เนื่องจากตอนนี้อยู่ในกลุ่มเดียวกับที่คุณสร้างไว้ในคำสั่งก่อนหน้า คุณจะต้องทดสอบเพื่อให้แน่ใจว่า docker ทำงานโดยไม่มี sudo ดังนั้นให้พิมพ์ docker run hello-world ในฐานะผู้ใช้ทั่วไปเพื่อให้แน่ใจว่าคุณจะไม่ได้รับข้อผิดพลาดอื่นๆ

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

วิธีที่ 3:การใช้ ACL เพื่อแก้ไขข้อมูลเมตาของ Docker

หากคุณไม่ต้องการเป็นส่วนหนึ่งของกลุ่มที่ทำให้คุณเหมือนเป็นผู้ใช้รูท คุณสามารถตั้งค่าไฟล์ซ็อกเก็ตให้ทำงานด้วยการอนุญาตบางอย่างเท่านั้น คุณสามารถละเว้นกระบวนการ gpasswd ได้หากต้องการทำเช่นนี้ ต้องสแกนระบบไฟล์เพื่อหารายการ ACL ที่แตกต่างกัน ซึ่งเป็นภาระสำหรับผู้ที่ทำการตรวจสอบความปลอดภัย แต่จะป้องกันไม่ให้คุณต้องใช้กลุ่มนักเทียบท่าทั้งหมด

หากคุณต้องการทำเช่นนี้ คุณสามารถเรียกใช้ sudo setfacl -m user:name:rw /var/run/docker.sock ในขณะที่แทนที่ผู้ใช้และชื่อด้วยป้ายกำกับที่เหมาะสม การดำเนินการนี้ให้สิทธิ์ในการเข้าถึงซ็อกเก็ต Docker ที่ /var/run/docker.sock ซึ่งควรทำงานร่วมกับเซิร์ฟเวอร์ Debian และ Ubuntu ได้

เกี่ยวกับผู้เขียน

การแก้ไขข้อผิดพลาด  ไม่สามารถเชื่อมต่อกับ Docker Daemon  บน Linux

เควิน แอร์โรว์ส

Kevin Arrows เป็นผู้เชี่ยวชาญด้านเทคโนโลยีที่มีประสบการณ์สูงและมีความรู้และมีประสบการณ์ในอุตสาหกรรมมานานกว่าทศวรรษ เขาได้รับการรับรองจาก Microsoft Certified Technology Specialist (MCTS) และมีความมุ่งมั่นอย่างแรงกล้าที่จะติดตามข่าวสารเกี่ยวกับการพัฒนาเทคโนโลยีล่าสุด Kevin ได้เขียนหัวข้อที่เกี่ยวข้องกับเทคโนโลยีอย่างกว้างขวาง โดยนำเสนอความเชี่ยวชาญและความรู้ของเขาในด้านต่างๆ เช่น การพัฒนาซอฟต์แวร์ ความปลอดภัยทางไซเบอร์ และการประมวลผลแบบคลาวด์ การมีส่วนร่วมของเขาในด้านเทคโนโลยีได้รับการยอมรับและเคารพอย่างกว้างขวางจากเพื่อนร่วมงานของเขา และเขาได้รับการยกย่องอย่างสูงจากความสามารถของเขาในการอธิบายแนวคิดทางเทคนิคที่ซับซ้อนในลักษณะที่ชัดเจนและรัดกุม