0

Khắc phục triệt để lỗi "permission denied" khi chạy lệnh Docker trên WSL 2 (Ubuntu)

Chào anh em!

Sau khi đã vượt qua được lỗi thiếu câu lệnh Docker thông qua việc bật WSL Integration, đôi khi anh em lại tiếp tục đối mặt với một lỗi khó chịu không kém khi gõ lệnh triển khai dự án:

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

Nhiều anh em thường bối rối vì nghĩ rằng Docker Desktop chưa bật hoặc cấu hình bị lỗi. Tuy nhiên, nếu Docker Desktop đã sáng đèn và WSL Integration đã được kích hoạt từ trước, thì nguyên nhân hoàn toàn không nằm ở đó.

Hôm nay, hãy cùng mổ xẻ nguyên nhân đích thực và cách xử lý dứt điểm lỗi quyền hạn này nhé!

1. Nguyên nhân thực sự là gì?

Lý do rất đơn giản: Tài khoản người dùng Linux hiện tại của bạn chưa được cấp quyền để giao tiếp với Docker Socket (/var/run/docker.sock).

Mặc định trên hệ điều hành Linux, chỉ có tài khoản root hoặc các tài khoản người dùng thuộc nhóm docker mới có quyền gọi các tiến trình của Docker daemon. Khi bạn đăng nhập vào WSL (Ubuntu) bằng tài khoản cá nhân, tài khoản đó chưa có quyền này, dẫn đến việc bị từ chối truy cập (Permission Denied).

2. Cách khắc phục chi tiết (2 lựa chọn)

Bạn có thể lựa chọn một trong hai cách dưới đây để xử lý triệt để vấn đề:

Cách 1: Thêm user hiện tại vào nhóm docker (Khuyên dùng)

Đây là giải pháp chuẩn mực và chuyên nghiệp nhất, giúp bạn không bao giờ phải gõ thêm từ khóa sudo rườm rà cho các lệnh Docker sau này.

  • Bước 1: Thêm tài khoản người dùng hiện tại vào nhóm docker:
    sudo usermod -aG docker $USER
    
  • Bước 2: Áp dụng ngay quyền hạn mới cho phiên làm việc hiện tại mà không cần phải khởi động lại WSL:
    newgrp docker
    
  • Bước 3: Bây giờ, bạn có thể thoải mái chạy lại lệnh dự án của mình mà không gặp bất kỳ trở ngại nào:
    docker compose up -d
    

Cách 2: Thêm sudo vào trước mỗi câu lệnh (Giải pháp chữa cháy nhanh)

Nếu bạn đang vội và không muốn phân quyền nhóm phức tạp, giải pháp đơn giản nhất là mượn quyền root bằng cách thêm sudo vào trước câu lệnh Docker của bạn:

sudo docker compose up -d

💡 Lưu ý nhỏ về các dòng cảnh báo (WARN): Trong quá trình chạy lệnh, nếu bạn nhìn thấy các dòng chữ màu vàng bắt đầu bằng WARN liên quan đến các biến như DB_DATABASE, DB_USERNAME, DB_PASSWORD, đừng quá lo lắng! Đó chỉ là thông báo nhắc nhở cho biết file .env của dự án chưa khai báo hoặc thiếu các biến môi trường đó. Nó chỉ là cảnh báo (warning) chứ không làm dừng tiến trình, bạn có thể bổ sung các thông số này vào file .env sau nhé.

Lời kết

Lỗi permission denied với Docker socket trên WSL thực chất chỉ là bài toán phân quyền cơ bản của hệ điều hành Linux. Nắm vững cách đưa user vào nhóm docker, bạn sẽ thao tác với các container mượt mà và chuyên nghiệp hơn rất nhiều!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí