Docker Virtualization Support
เปิด Docker Desktop แล้ว Error ตามรูป

อาการนี้คือ /dev/kvm ไม่มีอยู่บนเครื่อง แปลว่าโมดูล KVM ในเคอร์เนลไม่ถูกโหลด หรือ virtualization ถูกปิดอยู่ที่ระดับ BIOS/hypervisor สาเหตุเจอบ่อยสุดมี 3 อย่าง ไล่เช็กตามลำดับนี้
1.เช็กว่า CPU รองรับและเปิดอยู่ไหม
#egrep -c ‘(vmx|svm)’ /proc/cpuinfo
ผลลัพธ์ 0 = CPU ไม่รองรับ หรือปิดไว้ใน BIOS/UEFI ต้องเข้า BIOS ไปเปิด Intel VT-x (Intel Virtualization Technology) หรือ SVM Mode (AMD-V) แล้วบูตใหม่
ผลลัพธ์ > 0 = ไปข้อ 2
2. โหลดโมดูล KVM และทำให้ถาวร
# Intel
sudo modprobe kvm_intel
# AMD
sudo modprobe kvm_amd
#ls -l /dev/kvm
ถ้าเจอ /dev/kvm แล้ว ให้ตั้งให้โหลดทุกครั้งที่บูต:
# Intel
echo kvm_intel | sudo tee /etc/modules-load.d/kvm.conf
# AMD
echo kvm_amd | sudo tee /etc/modules-load.d/kvm.conf
ถ้า modprobe ฟ้อง error ให้ดูสาเหตุด้วย sudo dmesg | grep -i kvm ถ้าขึ้นว่า “disabled by bios” ก็กลับไปแก้ข้อ 1
3. ให้สิทธิ์ user เข้าถึง /dev/kvm
#sudo usermod -aG kvm $USER
จากนั้น logout แล้ว login ใหม่ (หรือรีบูต) แล้วเช็กด้วย groups ว่ามี kvm และ ls -l /dev/kvm ว่ากลุ่มเป็น kvm
ถ้าเครื่องนี้เป็น VM (เช่น รันบน WSL2, VMware, Proxmox, Hyper-V, cloud)
ต้องเปิด nested virtualization ที่ฝั่ง host ก่อน ไม่งั้น /dev/kvm จะไม่โผล่ในเครื่องลูก
> Proxmox: ตั้ง CPU type เป็น host แล้วเช็ก cat /sys/module/kvm_intel/parameters/nested ที่ host ให้เป็น Y
> VMware: ติ๊ก “Virtualize Intel VT-x/EPT or AMD-V/RVI” ใน VM settings
> Hyper-V: Set-VMProcessor -VMName <ชื่อ> -ExposeVirtualizationExtensions $true
> WSL2: ต้องใช้เคอร์เนล WSL ที่รองรับ และเพิ่ม nestedVirtualization=true ใน %UserProfile%\.wslconfig (Windows 11) แล้ว wsl –shutdown
> Cloud VM: ส่วนใหญ่ไม่รองรับ ต้องเลือก instance ที่รองรับ nested หรือ bare metal
ถ้ามี Docker Desktop for Linux
หลังแก้เสร็จ ลองรีสตาร์ต: # systemctl –user restart docker-desktop
ทั้งนี้ ถ้าเป็นเซิร์ฟเวอร์ที่ไม่จำเป็นต้องใช้ GUI ของ Docker Desktop จริง ๆ การใช้ Docker Engine ธรรมดา (docker-ce) จะไม่ต้องพึ่ง KVM เลย และเบากว่ามาก
หรือลง portainer.io เพื่อที่จะเข้าผ่านเว็บ
teee@NP Portainer.io % cat portainer-compose.yml
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: unless-stopped
ports:
– “8443:8000”
– “9443:9443”
volumes:
– /var/run/docker.sock:/var/run/docker.sock
– portainer_data:/data
volumes:
portainer_data:
name: portainer_data
เปิด Log Monitor เพื่อไปเอา setup_tokenไปกรอกตอนลงทะเบียนหน้าเว็บครั้งแรก
teee@NP Portainer.io % docker logs portainer –tail 50