Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Linux

Giải quyết nhanh chóng lỗi 'Không thể kết nối với Docker Daemon'

Đã từng thử chạy Docker và đột nhiên gặp phải lỗi “Không thể kết nối với daemon Docker “lỗi? Đó là một trong những vấn đề khó chịu nhất có thể ngăn cản bạn trước khi bạn bắt đầu. Trình nền Docker chạy lặng lẽ ở chế độ nền, xử lý mọi thứ từ khởi động và dừng vùng chứa đến quản lý hình ảnh, xây dựng lớp và xử lý tất cả các lệnh Docker của bạn như docker run , docker ps , v.v. Nếu thiết bị đầu cuối của bạn không thể truy cập được thì sẽ không có gì hoạt động. 

Trong hướng dẫn này, tôi sẽ giải thích lý do xảy ra lỗi này và chỉ cho bạn các cách khắc phục đơn giản, thiết thực để Docker chạy trơn tru trở lại.

Mục lục

Tìm hiểu công dụng của Docker Daemon

Docker daemon (dockerd) là một dịch vụ nền chịu trách nhiệm quản lý các container, hình ảnh, kết nối mạng và lưu trữ. Khi bạn chạy các lệnh Docker, CLI không tự thực hiện các tác vụ này; thay vào đó, nó gửi yêu cầu đến daemon. Trên các hệ thống Linux, giao tiếp này diễn ra thông qua một ổ cắm Unix có vị trí tại “/var/run/docker.sock”. Trên môi trường Docker Desktop hoặc WSL, CLI giao tiếp với daemon thông qua một ống dẫn có tên hoặc ổ cắm do máy ảo quản lý.

Nếu CLI không thể giao tiếp với daemon, bạn sẽ gặp các lỗi như “Không thể kết nối với daemon Docker tại unix:///var/run/docker.sock. Daemon docker có đang chạy không? “.

Giải quyết nhanh chóng lỗi  Không thể kết nối với Docker Daemon

Nó thường xảy ra vì một trong những lý do sau:

  • Dịch vụ Docker không chạy.
  • Người dùng của bạn không có quyền truy cập vào ổ cắm Docker.
  • Docker đang sử dụng ngữ cảnh sai.
  • Ổ cắm Docker bị thiếu hoặc có quyền không chính xác.
  • Biến môi trường như DOCKER_HOST bị định cấu hình sai.
  • Các sự cố dành riêng cho nền tảng (Docker Desktop, WSL hoặc daemon từ xa).

Xác định phần nào của chuỗi liên lạc này bị hỏng chính là chìa khóa để khắc phục sự cố một cách chính xác.

Kiểm tra quyền người dùng của bạn

Trên các hệ thống Linux, Docker giao tiếp thông qua một socket Unix do người dùng root sở hữu. Người dùng phải thuộc nhóm Docker để có thể truy cập nó mà không cần sudo .

Để xác minh quyền của ổ cắm, hãy chạy lệnh sau:

ls -l /var/run/docker.sock
Giải quyết nhanh chóng lỗi  Không thể kết nối với Docker Daemon

Đầu ra này cho chúng ta biết rằng socket được sở hữu bởi root và chỉ những người dùng thuộc nhóm docker mới được phép đọc hoặc ghi vào nó. Nếu tài khoản người dùng của bạn không thuộc nhóm này, Docker sẽ từ chối quyền truy cập và không thực thi các lệnh. Để khắc phục sự cố này, bạn cần thêm người dùng của mình vào nhóm Docker:

sudo usermod -aG docker $USER

Nếu nhóm Docker không tồn tại, bạn có thể tạo nó bằng lệnh sau:

sudo groupadd docker

Xác minh dịch vụ Docker đang chạy

Một vấn đề rất đơn giản nhưng quan trọng khác là Docker có thể không chạy. Nếu daemon Docker bị dừng, Docker CLI không có gì để kết nối, dẫn đến lỗi đã nêu. Để kiểm tra trạng thái hiện tại của dịch vụ Docker, hãy chạy lệnh sau:

systemctl status docker

Trong trường hợp của chúng tôi, Docker đang hoạt động và chạy thành công. Tuy nhiên, nếu đầu ra hiển thị trạng thái như không hoạt động (chết) hoặc không thành công, điều đó có nghĩa là dịch vụ Docker không chạy.

Giải quyết nhanh chóng lỗi  Không thể kết nối với Docker Daemon

Để khởi động Docker theo cách thủ công, bạn có thể chạy lệnh này:

sudo systemctl start docker

Nếu bạn muốn Docker tự động khởi động bất cứ khi nào hệ thống khởi động, hãy kích hoạt nó bằng lệnh sau:

sudo systemctl enable docker

Khởi động Daemon Docker theo cách thủ công (dockerd)

Trên các máy chủ tối thiểu hoặc thiết lập Linux tùy chỉnh, Docker có thể không được quản lý bởi systemd. Trong những môi trường này, daemon Docker có thể không tự động khởi động, ngay cả khi Docker đã được cài đặt. Để kiểm tra xem daemon có thể khởi động hay không, hãy thử chạy nó theo cách thủ công:

sudo dockerd

Theo dõi đầu ra một cách cẩn thận. Nếu có sự cố xảy ra, Docker thường in một thông báo lỗi rõ ràng giải thích sự cố, chẳng hạn như sự cố trình điều khiển lưu trữ, lỗi quyền hoặc xung đột mạng.

Kiểm tra và sửa lỗi Docker Unix Socket

Docker CLI tương tác với daemon Docker bằng ổ cắm Unix. Nếu ổ cắm này bị thiếu, bị hỏng hoặc có quyền không chính xác, Docker không thể kết nối. Bạn có thể kiểm tra xem ổ cắm có tồn tại hay không bằng lệnh sau:

ls /var/run/docker.sock
Giải quyết nhanh chóng lỗi  Không thể kết nối với Docker Daemon

Nếu tệp bị thiếu, điều đó thường có nghĩa là daemon Docker không chạy hoặc Docker không tạo được ổ cắm trong khi khởi động. Trong trường hợp đó, bạn cần khởi động lại Docker để tạo lại nó:

sudo systemctl restart docker

Nếu ổ cắm tồn tại nhưng có quyền không chính xác, hãy sửa chúng bằng các lệnh sau:

sudo chown root:docker /var/run/docker.sock
sudo chmod 660 /var/run/docker.sock
Giải quyết nhanh chóng lỗi  Không thể kết nối với Docker Daemon

Xác minh bối cảnh Docker và biến môi trường

Đôi khi Docker không thể kết nối với daemon vì nó trỏ sai điểm cuối. Điều này có thể xảy ra nếu DOCKER_HOST của bạn biến môi trường được đặt không chính xác hoặc nếu bối cảnh Docker đang hoạt động của bạn trỏ đến một môi trường từ xa hoặc không khả dụng.

Kiểm tra biến môi trường

Chạy lệnh sau để xem có biến môi trường nào liên quan đến Docker được đặt không:

env | grep DOCKER

Nếu bạn thấy nội dung như DOCKER_HOST=tcp://localhost:2375 , điều đó có nghĩa là Docker đang trỏ đến một daemon từ xa có thể không hoạt động hoặc bị thiếu. Bạn có thể tạm thời khắc phục điều này bằng cách bỏ đặt biến:

unset DOCKER_HOST

Để xóa vĩnh viễn, hãy xóa nó khỏi các tệp cấu hình shell như “~/.bashrc”, “~/.zshrc” và “/etc/environment”.

Kiểm tra bối cảnh Docker đang hoạt động

Bối cảnh Docker xác định daemon nào mà CLI giao tiếp. Bạn có thể liệt kê các ngữ cảnh có sẵn và xem ngữ cảnh đang hoạt động:

docker context ls
Giải quyết nhanh chóng lỗi  Không thể kết nối với Docker Daemon

Dấu hoa thị (*) cho biết ngữ cảnh hiện đang hoạt động. Nếu ngữ cảnh trỏ đến môi trường không khả dụng, hãy chuyển về daemon cục bộ mặc định:

docker context use default

Sự cố dành riêng cho nền tảng

Một số sự cố kết nối chỉ xảy ra trên các nền tảng cụ thể. Ví dụ:Docker Desktop trên Windows hoặc macOS chạy daemon bên trong một máy ảo nhẹ. Nếu VM không khởi động được, Docker CLI không thể kết nối. Để khắc phục sự cố này, hãy khởi động lại Docker Desktop của bạn.

Tương tự, khi sử dụng Docker với WSL, daemon sẽ chạy trong môi trường Linux. Đảm bảo rằng WSL được cài đặt và chạy đúng cách:

wsl --list --running 
Giải quyết nhanh chóng lỗi  Không thể kết nối với Docker Daemon

Nếu không thể truy cập trình nền Docker từ WSL, việc khởi động lại dịch vụ Docker Desktop hoặc bản phân phối WSL cụ thể thường khắc phục được sự cố.

Mẹo tránh lỗi này trong tương lai

Để tránh lỗi “không thể kết nối với daemon Docker” trong tương lai, hãy luôn đảm bảo dịch vụ Docker đang chạy, đặc biệt là sau khi cập nhật hệ thống và thêm người dùng của bạn vào nhóm Docker để bỏ qua việc sử dụng sudo . Thường xuyên kiểm tra bối cảnh Docker đang hoạt động của bạn, đặc biệt là sau khi chuyển đổi máy, bản phân phối WSL hoặc sử dụng Docker Desktop và tránh đặt DOCKER_HOST trừ khi kết nối với một daemon từ xa cụ thể, vì các biến được định cấu hình sai có thể định hướng sai các lệnh CLI. Ngoài ra, hãy theo dõi nhật ký daemon bằng journalctl -u docker.service để nắm bắt vấn đề sớm.