การอนุญาตถูกปฏิเสธเมื่อรัน Docker หลังจากติดตั้งเป็น Snap


33

ฉันได้ติดตั้ง Docker ผ่าน Software store ซึ่งระบุว่าเป็น Snap package ซึ่งฉันคิดว่าดี แต่น่าเสียดายที่คำสั่ง Docker ทุกคำที่ฉันลองใช้ไม่ทำงาน:

$ docker info
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.30/info: dial unix /var/run/docker.sock: connect: permission denied

ความคิดวิธีการแก้ไขปัญหานี้?

แก้ไข:ตอนนี้ฉันได้แก้ไขสิ่งนี้โดยการติดตั้ง Docker จากที่เก็บข้อมูลของ Dockerซึ่งอาจใช้ได้ผลสำหรับผู้ที่กำลังอ่านคำถามนี้ในอนาคตเช่นกัน ฉันปล่อยให้คำถามเปิดไว้สำหรับผู้ที่ต้องการให้สามารถเรียกใช้จาก Snap ได้


ติดตั้งนักเทียบท่าจาก repos อย่างเป็นทางการของนักเทียบท่า นักเทียบท่าทำงานแล้วเมื่อฉันเพิ่มผู้ใช้ของฉันไปยังdockerกลุ่มid -nGไม่ได้แสดงนักเทียบท่าและdockerคำสั่งใด ๆทำให้เกิดข้อผิดพลาดในการอนุญาตที่ถูกปฏิเสธ การออกจากระบบและกลับเข้าใช้งานไม่ได้เนื่องจากกระบวนการของระบบนักเชื่อมต่อยังคงทำงาน ระบบการรีบูตเครื่องหรือการรีสตาร์ท Docker แสดงให้เห็นว่าผู้ใช้เป็นส่วนหนึ่งของกลุ่มนักเทียบท่าและอนุญาตให้เรียกใช้คำสั่งนักเทียบท่าได้ หมายเหตุ: 0 ตัวแทนไม่สามารถเพิ่มความคิดเห็น
Santosh Patel

คำตอบ:


33

นี่คือจากหน้า GitHub คุณลองทำตามขั้นตอนเหล่านี้:

If you are using Ubuntu Core 16,

Connect the docker:home plug as it's not auto-connected by default:

$ sudo snap connect docker:home

If you are using an alternative snap-compatible Linux distribution ("classic" in snap lingo), and would like to run docker as a normal user:

Create and join the docker group.

$ sudo addgroup --system docker
$ sudo adduser $USER docker
$ newgrp docker

You will also need to disable and re-enable the docker snap if you added the group while it was running.

$ sudo snap disable docker
$ sudo snap enable docker

จากDocker Snap GitHub


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

2
ปิดการใช้งาน / เปิดใช้งานนักเทียบท่า snap ได้เคล็ดลับสำหรับฉันขอบคุณ
Manish Kumar

1
สิ่งนี้ใช้ได้กับ Ubuntu (เดสก์ท็อป) 19.04 เช่นกัน
Nick Breen

31

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

ทางออกชั่วคราว

ใช้sudoคำสั่งเพื่อดำเนินการคำสั่งด้วยสิทธิ์ระดับสูงทุกครั้ง

ทางออกถาวร (แนะนำ)

เพิ่มผู้ใช้ปัจจุบันในdockerกลุ่ม สิ่งนี้สามารถทำได้โดยการพิมพ์

sudo usermod -a -G docker $USER

คุณต้องออกจากระบบและลงชื่อเข้าใช้อีกครั้งเพื่อให้การเป็นสมาชิกกลุ่มมีผล

ที่มา: techoverflow.net


1
Google-fu ของคุณดีกว่าของฉันอย่างเห็นได้ชัด น่าเสียดายที่มันใช้ไม่ได้ ก่อนอื่นdockerกลุ่มไม่มีอยู่จริง จากนั้นฉันก็วิ่งออกไปก่อนแล้วจึงรันsudo addgroup dockerคำสั่งของคุณใหม่จากนั้นออกจากระบบอีกครั้ง น่าเสียดายที่ข้อผิดพลาดที่ปรากฏในคำถามยังคงอยู่ ...
Vincent

2
@ เร็ว ๆ นี้คุณไม่ลืมการเปลี่ยนแปลงกลุ่มไม่ได้เกิดขึ้นทันทีใช่ไหม? ลองnewgrp dockerหรือออกจากระบบและเข้าสู่ระบบ
ADDB

ไม่ขออภัยลืมที่จะพูดถึงว่า - ฉันอัพเดทความคิดเห็นของฉันในขณะที่คุณตอบกลับ :) การวิ่งgroups vincentให้:vincent adm cdrom sudo dip plugdev lpadmin sambashare docker
Vincent

@ เพิ่งมาเพื่ออ้างอิง daemon นักเทียบท่าของคุณเริ่มใช่มั้ย? ลองsudo /etc/init.d/docker statusหรือsudo service docker statusทดสอบสิ่งนี้
ADDB

อืมผมไม่คิดว่าการทำงานเหล่านั้นเพราะมันเป็น Snap: paste.ubuntu.com/25219172 ที่กล่าวว่าจะให้ps cax | grep dockerd 31034 ? Ssl 0:05 dockerd
Vincent

6

ฉันสมมติว่าชื่อผู้ใช้ของคุณอยู่ในกลุ่มนักเทียบท่าอยู่แล้ว เพื่อตรวจสอบนี้ออกคำสั่งด้านล่าง

id -nG

หากไม่ต้องการเพิ่มผู้ใช้ของคุณในกลุ่มนักเทียบท่าโดยใช้คำสั่งด้านล่าง

sudo groupadd docker
sudo usermod -aG docker $USER

เมื่อคุณดำเนินการคำสั่งsudo systemctl start dockerมันจะสร้างกระบวนการนักเทียบท่า กระบวนการตัวเทียบท่านั้นมีdockerdเธรด daemon คำสั่งยังสร้างdocker.sockซ็อกเก็ต Unix ที่เป็นค่าเริ่มต้น docker.sockซ็อกเก็ตได้ฟังอย่างต่อเนื่องโดยdockerdด้ายภูต สิ่งนี้ทำให้คุณสามารถทำ IPC ระดับเคอร์เนลด้วยdocker.pidกระบวนการ เพื่อให้สามารถใช้ซ็อกเก็ตนักเทียบท่านี้คุณต้องได้รับอนุญาตจากระดับกระบวนการ ( docker.pid) และระดับไฟล์ ( docker.sock) ที่เหมาะสม ดังนั้นการรันคำสั่งสองคำสั่งด้านล่างควรแก้ปัญหาของคุณ sudo chmod a+rwx /var/run/docker.sock # You can provide just execute permission sudo chmod a+rwx /var/run/docker.pid


เฉพาะการทำงานกับอูบุนตู 18.04 เท่านั้น ขอบคุณมาก Uddhav Gautam
Sabbir


1

คุณควรเพิ่มผู้ใช้ในกลุ่มนักเทียบท่า ( ดูเอกสารอย่างเป็นทางการ )

คุณสามารถเพิ่มsudoต่อหน้าคำสั่งหรือคุณสามารถเพิ่มผู้ใช้ในdockerกลุ่มโดยใช้คำสั่งนี้:

sudo usermod -aG docker <USER>

ออกจากระบบและกลับเข้าสู่ระบบเพื่อประเมินความเป็นสมาชิกกลุ่มของคุณอีกครั้ง


เนื่องจากเนื้อหาที่ลิงก์นั้นอาจหายไปโปรดเพิ่มรายละเอียดที่เกี่ยวข้องที่นี่
Chai T. Rex

ไม่จำเป็นคำตอบอื่น ๆ ที่ได้กล่าวถึงการเพิ่มผู้ใช้ไปยังกลุ่ม - มันไม่ได้ช่วยอะไร (นอกจากนี้ยังไม่มีเหตุผลที่จะช่วยในการติดตั้ง Snap แต่ไม่ใช่สำหรับการติดตั้งปกติ)
Vincent
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.