Sửa lỗi: 'Cannot connect to the Docker daemon' trong VS Code Dev Containers

beginner💻 VS Code2026-06-04| Linux (Ubuntu 22.04+, Debian, Fedora), WSL2 (Windows 10/11), VS Code với tiện ích mở rộng Dev Containers

Error Message

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
#docker#dev-containers#vscode#linux#wsl2

Tình huống lỗi

Bạn vừa hoàn tất cấu hình .devcontainer và sẵn sàng bắt tay vào viết code. Bạn nhấn nút màu xanh "Reopen in Container" với hy vọng mọi thứ sẽ diễn ra suôn sẻ. Tuy nhiên, thanh tiến trình bị treo và một lỗi terminal đột ngột dừng quá trình build.

Kiểm tra nhanh các bản log sẽ thấy nguyên nhân:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

Trở ngại này thường gặp nhất trên các bản phân phối Linux như Ubuntu hoặc đối với các nhà phát triển Windows sử dụng WSL2. Điều này có nghĩa là VS Code đang cố gắng giao tiếp với Docker thông qua một ống dẫn cục bộ (Unix socket), nhưng kết nối bị từ chối hoặc socket đã bị khóa.

Phân tích: Tại sao lỗi này xảy ra?

Thông thường, vấn đề nằm ở một trong ba lỗi cấu hình phổ biến sau:

  • Dịch vụ ngoại tuyến: Tiến trình chạy ngầm của Docker (daemon) đơn giản là không chạy trên máy chủ của bạn.
  • Vấn đề quyền truy cập: Tài khoản người dùng của bạn thiếu quyền đọc hoặc ghi vào /var/run/docker.sock. Theo mặc định, socket này thuộc sở hữu của root.
  • Lỗi kết nối WSL2: Trên Windows, Docker Desktop có thể chưa được cấp quyền chia sẻ engine với bản phân phối Linux WSL2 cụ thể của bạn.

Bước 1: Kiểm tra trạng thái Docker Daemon

Trước khi đi sâu vào các cách sửa lỗi quyền truy cập phức tạp, hãy đảm bảo rằng engine thực sự đang bật. Chạy lệnh này trong terminal của bạn:

sudo systemctl status docker

Nếu kết quả hiển thị inactive (dead), hãy khởi động nó. Sử dụng các lệnh sau để bắt đầu dịch vụ và đảm bảo dịch vụ tự động khởi chạy mỗi khi bạn khởi động máy tính:

sudo systemctl start docker
sudo systemctl enable docker

Bước 2: Thêm người dùng của bạn vào nhóm Docker

Trên Linux, Docker yêu cầu đặc quyền root. Thay vì thêm tiền tố sudo cho mọi lệnh, cách thực hành tiêu chuẩn là tham gia vào nhóm docker. Điều này cung cấp cho VS Code "chìa khóa" cần thiết để truy cập socket.

  • Tạo nhóm docker nếu nó chưa tồn tại:

sudo groupadd docker

  
  - Thêm người dùng hiện tại của bạn (`$USER`) vào nhóm này:
    ```
sudo usermod -aG docker $USER
  • Quan trọng: Các thay đổi về nhóm không áp dụng cho các phiên đang hoạt động. Bạn phải đăng xuất khỏi hệ điều hành và đăng nhập lại. Nếu bạn đang sử dụng WSL2, hãy chạy wsl --shutdown trong cửa sổ Windows PowerShell để bắt buộc khởi động lại.

Cần một giải pháp tạm thời mà không cần đăng xuất? Chạy newgrp docker trong terminal của bạn. Lệnh này chỉ ảnh hưởng đến tab terminal cụ thể đó, vì vậy việc khởi động lại hoàn toàn vẫn tốt hơn cho sự ổn định của VS Code.

Bước 3: Điều chỉnh quyền Socket (Giải pháp nhanh)

Nếu việc thêm vào nhóm không giải quyết được vấn đề ngay lập tức, bạn có thể mở quyền socket một cách thủ công. Mặc dù cách này kém an toàn hơn một chút trên các hệ thống có nhiều người dùng, nhưng đây là một cách sửa lỗi rất hiệu quả cho môi trường phát triển cục bộ.

sudo chmod 666 /var/run/docker.sock

Lệnh này cấp quyền đọc và ghi cho tất cả người dùng. Lưu ý rằng một số bản cập nhật hệ thống hoặc khởi động lại Docker có thể đưa tệp này trở lại mức quyền 660 mặc định.

Bước 4: Cấu hình tích hợp WSL2 trên Windows

Người dùng Windows thường thấy lỗi này khi Docker Desktop đang chạy nhưng không "giao tiếp" với hệ thống con Linux.

  • Mở bảng điều khiển Docker Desktop.
  • Đi tới Settings (biểu tượng bánh răng) > Resources > WSL Integration.
  • Đảm bảo rằng "Enable integration with my default WSL distro" đã được bật.
  • Tìm bản phân phối cụ thể của bạn (ví dụ: "Ubuntu-22.04") trong danh sách và chuyển công tắc sang On.
  • Nhấn Apply & Restart.

Bước 5: Kiểm tra cài đặt đường dẫn VS Code

Thỉnh thoảng, VS Code tìm kiếm tệp thực thi Docker trong sai thư mục. Mở cài đặt của bạn (Ctrl + ,) và tìm kiếm docker.path. Đảm bảo trường "Dev Containers: Docker Path" để trống (mặc định là docker) hoặc trỏ đến đường dẫn hợp lệ của tệp thực thi Docker của bạn.

Xác minh: Xác nhận lỗi đã được sửa

Để xác nhận mọi thứ đã hoạt động, hãy mở một terminal mới và chạy:

docker ps

Nếu bạn thấy một bảng sạch với các tiêu đề như CONTAINER IDIMAGE mà không cần dùng sudo, bạn đã thành công. Hãy quay lại VS Code và nhấn "Try Again". Dev Container của bạn giờ đây sẽ tải image gốc và bắt đầu build mà không gặp lỗi nào khác.

Related Error Notes