วิธีการทำให้ user สามารถใช้ docker ในสิทธิ์ root

ข้อผิดพลาด “permission denied while trying to connect to the Docker daemon socket” เกิดจากการที่ผู้ใช้ไม่มีสิทธิ์เพียงพอที่จะเข้าถึง Docker daemon ซึ่งโดยปกติจะต้องรันคำสั่ง Docker ด้วยสิทธิ์ root หรือเป็นสมาชิกของกลุ่ม docker เพื่อเข้าถึงไฟล์ socket (/var/run/docker.sock) ของ Docker daemon

วิธีแก้ไข

1. รันคำสั่ง Docker ด้วย sudo

ลองเพิ่ม sudo หน้าคำสั่ง Docker:

bashCopy codesudo docker ps

หากทำงานได้ แสดงว่าปัญหาเกิดจากสิทธิ์การเข้าถึงของผู้ใช้


2. เพิ่มผู้ใช้ในกลุ่ม docker

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

bashCopy codesudo usermod -aG docker $USER

จากนั้นออกจากระบบและเข้าสู่ระบบใหม่ (หรือใช้คำสั่ง newgrp docker) เพื่อให้การเปลี่ยนแปลงมีผล:

bashCopy codenewgrp docker
docker ps

3. ตรวจสอบสิทธิ์ของไฟล์ socket

ตรวจสอบสิทธิ์ของไฟล์ socket /var/run/docker.sock:

bashCopy codels -l /var/run/docker.sock

ไฟล์นี้ควรมีสิทธิ์ให้ผู้ใช้ในกลุ่ม docker สามารถเข้าถึงได้ เช่น:

bashCopy codesrw-rw---- 1 root docker 0 Jan  2 12:00 /var/run/docker.sock

หากกลุ่มไม่ใช่ docker หรือไม่มีสิทธิ์ที่เหมาะสม คุณสามารถปรับสิทธิ์ได้:

bashCopy codesudo chown root:docker /var/run/docker.sock
sudo chmod 660 /var/run/docker.sock

4. ตรวจสอบว่า Docker daemon ทำงานอยู่

ตรวจสอบสถานะของ Docker daemon:

bashCopy codesudo systemctl status docker

หาก Docker daemon ไม่ได้ทำงาน ให้เริ่มต้นด้วยคำสั่ง:

bashCopy codesudo systemctl start docker

5. ตรวจสอบว่า Docker ติดตั้งถูกต้อง

หากยังไม่ได้ติดตั้ง Docker อย่างถูกต้องหรือครบถ้วน ให้ติดตั้งหรืออัปเดต Docker:

bashCopy codesudo apt update
sudo apt install docker.io
sudo systemctl enable docker
sudo systemctl start docker

6. สำหรับ WSL (Windows Subsystem for Linux)

หากใช้ Docker บน WSL และเกิดปัญหานี้:

  • ตรวจสอบว่า WSL เชื่อมต่อกับ Docker Desktop ใน Windows หรือไม่
  • ตรวจสอบการตั้งค่า integration ใน Docker Desktop และเปิดใช้งานสำหรับ WSL Distro ที่ต้องการ

การตรวจสอบเพิ่มเติม

หากปัญหายังคงอยู่:

  • ตรวจสอบว่า Docker socket (/var/run/docker.sock) มีปัญหาหรือไม่
  • เช็ค Docker logs เพื่อหาข้อผิดพลาด:bashCopy codesudo journalctl -u docker

แจ้งเพิ่มเติมได้หากคุณต้องการคำแนะนำเพิ่มเติม!

Share

You may also like...

ใส่ความเห็น