LỗiBạn đã sẵn sàng lập trình, nhưng khi chạy docker ps hoặc docker-compose up, bạn lại gặp trở ngại. Thay vì danh sách các container, bạn thấy thông báo gây ức chế này:
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Docker không chạy trực tiếp trên macOS vì engine này dựa vào các tính năng kernel đặc thù của Linux. Để lấp đầy khoảng cách này, Docker Desktop chạy một máy ảo Linux nhẹ ở chế độ nền. Lỗi này thường có nghĩa là công cụ CLI của bạn đang cố gắng kết nối với máy ảo đó, nhưng không có phản hồi.
Tóm tắt: Cách khắc phục nhanh- Khởi chạy ứng dụng: Mở Docker Desktop từ thư mục Applications và đợi biểu tượng con cá voi ngừng nhấp nháy.- Xác minh Socket: Chạy lệnh ls -l /var/run/docker.sock. Nếu không tìm thấy, Docker chưa được khởi tạo hoàn toàn.- Đặt lại Context: Chạy docker context use default để đảm bảo bạn không trỏ đến một dịch vụ không tồn tại.## Các nguyên nhân thường gặp và giải pháp### 1. Docker Desktop chưa thực sự chạyĐa số trường hợp, cách giải quyết rất đơn giản: Docker chưa được kích hoạt. Không giống như Linux, nơi Docker thường tự động khởi chạy như một dịch vụ hệ thống, macOS yêu cầu ứng dụng Docker Desktop phải mở để cung cấp lớp ảo hóa.
Khởi chạy nó từ terminal bằng lệnh sau:
open /Applications/Docker.app
Hãy chờ một lát. Trên MacBook Pro M2, engine thường mất khoảng 20 đến 30 giây để khởi động. Các máy Mac Intel cũ hơn có thể cần cả phút. Bạn sẽ biết nó đã sẵn sàng khi lệnh docker info trả về một khối văn bản thay vì thông báo lỗi.
2. Thiết lập Socket 'Nâng cao' (macOS Ventura & Sonoma)Từ phiên bản 4.13, Docker Desktop đã thay đổi cách xử lý tệp /var/run/docker.sock để tăng cường bảo mật. Nếu tệp này bị thiếu, terminal của bạn sẽ không biết cách để kết nối với engine.
Đi tới Settings > Advanced trong Docker Desktop. Tìm tùy chọn "Allow the default Docker socket to be used". Nếu nó chưa được chọn, hãy tích vào đó và nhấn "Apply & Restart." Nếu đã được chọn nhưng vẫn lỗi, hãy thử tắt đi và bật lại để buộc Docker tạo lại liên kết (symlink).
3. Sai lệch ContextNếu bạn đã từng thử qua các giải pháp thay thế như Colima, OrbStack, hoặc Minikube, Docker CLI của bạn có thể đang trỏ nhầm chỗ. Hãy coi context như một danh bạ điện thoại; CLI của bạn đang gọi cho 'Colima' trong khi lẽ ra nó phải gọi cho 'Docker Desktop.'
Kiểm tra các kết nối đang hoạt động:
docker context ls
Nếu dấu sao (*) nằm cạnh bất kỳ mục nào khác ngoài default (và bạn không chủ đích dùng công cụ đó), hãy chuyển lại:
docker context use default
4. Với người dùng Colima: Máy ảo đang ngủCác lập trình viên thường dùng Colima để tiết kiệm RAM, vì nó thường chỉ tốn khoảng 2GB so với mức tiêu thụ nặng nề của Docker Desktop. Tuy nhiên, bạn phải khởi động nó thủ công sau mỗi lần khởi động lại máy:
colima start
Nếu nó bị treo hoặc socket không phản hồi, việc khởi động lại cưỡng bức thường sẽ xóa sạch cache:
colima stop
colima start --force
5. Các biến môi trường cũCác script thiết lập cũ đôi khi để lại biến DOCKER_HOST trong profile shell của bạn. Điều này buộc Docker tìm kiếm một địa chỉ mạng thay vì local Unix socket. Kiểm tra các thiết lập ẩn bằng cách chạy:
echo $DOCKER_HOST
Nếu nó trả về giá trị như tcp://localhost:2375, bạn cần xóa nó đi. Chạy lệnh unset DOCKER_HOST. Để xử lý triệt để, hãy mở tệp .zshrc hoặc .bash_profile và xóa bất kỳ dòng nào có export biến đó.
Kiểm tra: Xác nhận kết quảSau khi áp dụng các cách sửa lỗi, hãy chạy thử một bài kiểm tra kết nối nhanh:
docker ps
Thành công là khi bạn thấy tiêu đề bảng sạch sẽ. Ngay cả khi không có container nào đang chạy, việc thấy các tiêu đề cột có nghĩa là cầu nối liên lạc đã được khôi phục:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Để xem chi tiết hơn, lệnh docker version lúc này sẽ liệt kê cả phần "Client" và "Server". Nếu phần "Server" xuất hiện, bạn đã chính thức quay trở lại làm việc.

