ตอบคำถามนี้แล้ว แต่นี่เป็นข้อมูลเพิ่มเติม
ไม่ว่าคุณจะอยู่ใน Arch หรือการแจกจ่ายอื่นเช่น Fedora หรือ Ubuntu นั้น Docker ใช้ไฟล์ซ็อกเก็ตเพื่อสื่อสาร เมื่อคุณรันdocker
คำสั่งมันจะใช้ซ็อกเก็ตนี้เพื่อพูดคุยกับ Docker daemon แน่นอนว่า daemon จะต้องทำงาน (และมักจะปิดการใช้งานตามค่าเริ่มต้น) แต่หากผู้ใช้ของคุณไม่สามารถเข้าถึงซ็อกเก็ตได้ก็จะไม่สามารถสื่อสารกับ daemon ได้เช่นกัน
คุณต้องติดตั้ง Docker จากที่เก็บของการแจกจ่ายก่อน บางคนดาวน์โหลดสคริปต์การติดตั้งและไพพ์ไปยังเชลล์ ( curl ... | sh
) แต่แนะนำให้ติดตั้งจากที่เก็บเพื่อให้สามารถอัปเดตได้ง่าย
โค้ง:
# pacman -S docker
Fedora:
# dnf install docker
ตามที่กล่าวไว้ข้างต้น daemon อาจถูกปิดใช้งานโดยค่าเริ่มต้น หากคุณต้องการใช้ Docker daemon จะต้องทำงานอยู่
เปิดใช้งาน (ดังนั้นจึงจะเริ่มต้นเมื่อบูต):
# systemctl enable docker
เริ่มทันที (หรือรีบูต):
# systemctl start docker
ตอนนี้โดยค่าเริ่มต้น (หากกลุ่มนักเทียบท่าหายไป) ซ็อกเก็ตนักเทียบท่าเป็นเจ้าของโดยรูท:
# ls -la /var/run/docker.sock
srw-rw---- 1 root root 0 Apr 28 17:22 /var/run/docker.sock
นี่คือเหตุผลที่ผู้ใช้ทั่วไปไม่สามารถพูดคุยกับดีมอนนักเทียบท่า ผู้ใช้ทั่วไปไม่มีสิทธิ์เพียงพอในการเข้าถึงซ็อกเก็ต ไม่สามารถเข้าถึงภูตได้จึงถือว่าไม่ได้ทำงานอยู่และแสดงข้อผิดพลาดนี้:Cannot connect to the Docker daemon. Is the docker daemon running on this host?
sudo
นี่คือเหตุผลที่คนจำนวนมากเพียงแค่เริ่มต้นคำสั่งหางทั้งหมดเป็นรากใช้ แต่ตามที่อธิบายไว้ในคำตอบอื่น ๆ Docker มีกลไกของตัวเองสำหรับสิ่งนั้นดังนั้นการใช้ sudo จึงไม่จำเป็น
จะเป็นการดีที่docker
จะมีการสร้างกลุ่มที่เรียกว่าเมื่อติดตั้ง Docker อย่างไรก็ตามหากกลุ่มนั้นไม่มีอยู่เมื่อ daemon เริ่มทำงานไฟล์ซ็อกเก็ตจะเป็นของ root
ในบางกรณีกลุ่มที่ใช้ในการมีชื่อที่แตกต่างกันเช่นdockerroot
ใน Fedora ตรวจสอบgrep docker /etc/group
ว่ามีกลุ่มดังกล่าวในระบบของคุณหรือไม่ หากคุณใช้กลุ่มนั้นอยู่แล้ว (ผู้ใช้ของคุณอยู่ในกลุ่มนั้น) คุณจะต้องกำหนดค่า Docker ให้ใช้:
ใน/etc/sysconfig/docker
เพิ่ม-G dockerroot
(หมายเหตุ: เป็นการแก้ปัญหาไม่ใช่วิธีที่ดีที่สุด):
OPTIONS='--selinux-enabled -G dockerroot'
หลังจากรีสตาร์ท daemon ผู้ใช้ของคุณจะสามารถเข้าถึงซ็อกเก็ต:
# systemctl restart docker
# ls -la /var/run/docker.sock
srw-rw---- 1 root dockerroot 0 Apr 28 17:32 /var/run/docker.sock
docker
มิฉะนั้นวิธีที่เป็นทางการจะใช้กลุ่มที่เรียกว่า หากมีอยู่ Docker จะใช้งานโดยอัตโนมัติเช่นตั้งค่ากลุ่มซ็อกเก็ตเป็นกลุ่มนั้น หากไม่มีอยู่สิ่งที่คุณต้องทำคือสร้างและรีสตาร์ท daemon:
# groupadd docker
# systemctl restart docker
ไฟล์ซ็อกเก็ตจะเป็นของกลุ่มนั้น:
# srw-rw---- 1 root docker 0 Apr 28 17:42 /var/run/docker.sock
ผู้ใช้ของคุณต้องอยู่ในdocker
กลุ่มเพื่อให้สามารถเข้าถึงซ็อกเก็ต:
# usermod -aG docker (user)
คุณอาจต้องออกจากระบบและเข้าสู่ระบบอีกครั้ง (หรือsu - (user)
) เรียกใช้id
เพื่อดูว่าคุณอยู่ในกลุ่ม
จากนั้นคุณสามารถใช้ Docker โดยไม่มี sudo / root:
$ docker version --format '{{.Server.Version}}'
1.9.1
ในที่สุดคำเตือน ผู้ใช้ที่เชื่อถือได้เท่านั้นที่ควรได้รับอนุญาตให้ควบคุม Docker daemon ของคุณ ดูhttps://docs.docker.com/engine/security/security/
(แต่แน่นอนเหมือนกันสำหรับ sudo - ผู้ใช้ที่เชื่อถือได้เท่านั้นควรอยู่ในwheel
กลุ่ม)