Computer >> Hướng Dẫn Máy Tính >  >> Xử Lý Sự Cố >> Linux

[SỬA LỖI] Không Kết Nối Được Docker Daemon Tại 'unix:///var/run/docker.sock'

Docker ngày càng phổ biến nhờ khả năng tạo, triển khai, chạy ứng dụng bằng container dễ dàng. Container đóng gói ứng dụng với thư viện, phụ thuộc thành gói hoàn chỉnh. Cài đặt Docker trên Linux khá đơn giản: chạy vài lệnh Terminal.

[SỬA LỖI] Không Kết Nối Được Docker Daemon Tại  unix:///var/run/docker.sock

Tuy nhiên, không phải ai cũng suôn sẻ sau khi cài thành công. Lỗi phổ biến: Cannot connect to the Docker daemon at (unix:///var/run/docker.sock. Is the docker daemon running?) Lỗi xuất hiện khi chạy docker run, docker info, docker pull, docker stop, v.v.

Nguyên nhân lỗi: Cannot Connect to the Docker Daemon

Sau nhiều phản hồi, chúng tôi tìm ra giải pháp hiệu quả. Các nguyên nhân:

  • Docker daemon chưa chạy.
  • Docker không tắt sạch.
  • Thiếu quyền root để khởi động dịch vụ docker.

Hiểu nguyên nhân, xem các giải pháp dưới đây.

Giải pháp 1: Khởi động dịch vụ Docker bằng systemctl

Vừa cài Docker mới trên Ubuntu hoặc reboot máy, khả năng lớn dịch vụ Docker chưa chạy. Docker daemon (dockerd) là dịch vụ hệ thống quản lý images, containers, networks, volumes và lắng nghe API Docker.

Systemctl thay thế SysV init, quản lý dịch vụ systemd trên Linux. Nếu không có systemctl, dùng lệnh service (xem giải pháp 4).

Lưu ý: Chỉ áp dụng cho cài Docker qua APT. Nếu cài qua SNAP, xem Giải pháp 5.

  1. Mở Terminal chạy lệnh unmask docker.
sudo systemctl unmask docker

Nếu start docker khi bị masked, báo lỗi 'Failed to start docker.service: Unit is masked'. Mask là phiên bản mạnh hơn của disable. Unit file bị mask liên kết đến '/dev/null'. Liệt kê trạng thái unit file: '$ systemctl list-unit-files'

2. Sau khi unmask, khởi động docker daemon bằng systemctl. Docker daemon quản lý Images, Containers, API requests. Chạy lệnh:

systemctl start docker
[SỬA LỖI] Không Kết Nối Được Docker Daemon Tại  unix:///var/run/docker.sock

3. Kiểm tra docker service đã active và running bằng systemctl status:

systemctl status docker
[SỬA LỖI] Không Kết Nối Được Docker Daemon Tại  unix:///var/run/docker.sock

Hình ảnh cho thấy docker đang active và running.

Giải pháp 2: Dọn dẹp 'Failed Docker Pull' và khởi động Docker

Đôi khi đóng Docker bất ngờ khi pull container. Điều này mask docker.service và docker.socket. Docker.socket tại '/var/run/docker.sock' giao tiếp với daemon. Cần unmask hai unit file trước khi start docker.

  1. Mở Terminal chạy lệnh:
systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service
[SỬA LỖI] Không Kết Nối Được Docker Daemon Tại  unix:///var/run/docker.sock

Nếu vẫn lỗi, xóa file trong thư mục Containerd trước khi start lại Docker. Containerd (từ Docker 1.11) quản lý vòng đời images.

2. Mở Terminal chạy lệnh (cần mật khẩu root):

sudo su
service docker stop
cd /var/run/docker/libcontainerd
rm -rf containerd/*
rm -f docker-containerd.pid
service docker start
[SỬA LỖI] Không Kết Nối Được Docker Daemon Tại  unix:///var/run/docker.sock

Giải pháp 3: Khởi động dịch vụ Dockerd (Docker Daemon)

Dockerd là Docker daemon lắng nghe API và quản lý đối tượng Docker. Dockerd là thay thế cho '$ systemctl start docker'.

  1. Mở Terminal chạy dockerd:
sudo dockerd
[SỬA LỖI] Không Kết Nối Được Docker Daemon Tại  unix:///var/run/docker.sock

Giải pháp 4: Khởi động Docker bằng lệnh Service

Nếu dùng SysV init system, systemctl không hoạt động. Dùng service command để khởi động docker daemon.

  1. Mở Terminal chạy:
sudo service --status-all
sudo service docker start
[SỬA LỖI] Không Kết Nối Được Docker Daemon Tại  unix:///var/run/docker.sock

Giải pháp 5: Khởi động Docker Service với Snap

Nếu cài Docker bằng Snap package manager, dùng lệnh snap quản lý daemon.

Snap thường tự quản lý dịch vụ. Nhưng lỗi này cần can thiệp thủ công. Các tham số: stop, start, restart. Ta dùng start.

  1. Mở Terminal chạy khởi động Docker:
sudo snap start docker
[SỬA LỖI] Không Kết Nối Được Docker Daemon Tại  unix:///var/run/docker.sock

2. Chạy lệnh kiểm tra Docker service đã khởi động:

sudo snap services

Liệt kê tất cả snap services đang chạy.

[SỬA LỖI] Không Kết Nối Được Docker Daemon Tại  unix:///var/run/docker.sock

Nếu chưa được, thử kết nối docker:home plug (mặc định không auto-connect). Sau đó khởi động Docker service.

3. Chạy lệnh:

sudo snap connect docker:home :home
sudo snap start docker
[SỬA LỖI] Không Kết Nối Được Docker Daemon Tại  unix:///var/run/docker.sock

Giải pháp 6: Khởi động Docker cho user không có quyền Root

Lỗi cũng do thiếu quyền cao, user không truy cập 'unix:///var/run/docker.sock'. Giải pháp: export biến Docker Host đến localhost cổng 2375.

  1. Mở Terminal chạy:
export DOCKER_HOST=tcp://localhost:2375
[SỬA LỖI] Không Kết Nối Được Docker Daemon Tại  unix:///var/run/docker.sock

Giải pháp 7: Cài đặt lại Docker

Nếu các giải pháp trên không khắc phục, khả năng cao cài đặt bị lỗi. Để cài đúng Docker trên Linux, làm theo hướng dẫn trang chủ Docker.