Computer >> Máy Tính >  >> Xử lý sự cố >> Linux

[FIX] Không thể kết nối với Docker Daemon tại ‘unix:///var/run/docker.sock’

Docker ngày càng trở nên phổ biến với khả năng tạo, triển khai và chạy các ứng dụng sử dụng vùng chứa một cách dễ dàng. Vùng chứa cho phép các nhà phát triển đóng gói một ứng dụng với tất cả các thư viện và phần phụ thuộc của nó trước khi triển khai nó dưới dạng một gói đầy đủ. Đang cài đặt Docker trên Linux tương đối dễ dàng. Tất cả những gì bạn cần làm là chạy một vài lệnh trong Terminal và bạn đã sẵn sàng.

[FIX] Không thể kết nối với Docker Daemon tại ‘unix:///var/run/docker.sock’

Tuy nhiên, điều này có thể không giống nhau đối với tất cả người dùng, ngay cả sau khi cài đặt thành công. Một trong những lỗi phát sinh phổ biến nhất là: Không thể kết nối với trình nền Docker tại (unix:///var/run/docker.sock. Trình nền của docker có đang chạy không?) Lỗi này có thể phát sinh khi chạy các lệnh docker khác nhau như chạy docker, thông tin về docker, kéo docker, dừng docker, v.v.

Nguyên nhân nào gây ra Lỗi:Không thể kết nối với Docker Daemon?

Sau khi nhận được nhiều lời phàn nàn của các nhà phát triển, chúng tôi quyết định đi sâu vào và đưa ra các giải pháp hiệu quả. Một số lý do gây ra lỗi này bao gồm:

  • Daemon Docker không đang chạy .
  • Docker không tắt máy sạch sẽ.
  • Thiếu đặc quyền root để bắt đầu dịch vụ docker.

Bây giờ bạn đã hiểu cơ bản về nguyên nhân sự cố, hãy xem các giải pháp khác nhau có sẵn cho bạn.

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

Nếu bạn vừa hoàn thành cài đặt mới Docker trên Ubuntu hoặc khởi động lại PC của mình, thì khả năng cao là dịch vụ Docker không chạy . Docker daemon (dockerd) là dịch vụ hệ thống dành cho docker. Dịch vụ này xử lý các đối tượng Docker khác nhau như hình ảnh, vùng chứa, mạng và khối lượng và lắng nghe các yêu cầu API Docker.

Lệnh Systemctl ra đời để thay thế hệ thống SysV init cũ và nó quản lý các dịch vụ systemd chạy trên hệ thống Linux. Nếu bạn không có systemctl trong hệ thống của mình, đừng lo lắng; sử dụng dịch vụ lệnh như được mô tả bên dưới.

Lưu ý: Phương pháp này chỉ hoạt động cho những người dùng đã cài đặt Docker với trình quản lý gói APT. Nếu bạn đã cài đặt Docker qua SNAP , tham khảo Giải pháp 5 bên dưới.

  1. Mở Nhà ga và thực hiện lệnh đầu tiên - mở mặt nạ docker .
sudo systemctl unmask docker

Nếu chúng tôi cố gắng khởi động dịch vụ docker khi docker bị che, chúng tôi có thể gặp phải lỗi "Không thể khởi động docker.service:Unit is masked." Mask có thể được coi là một phiên bản vô hiệu hóa mạnh mẽ hơn. Khi tệp đơn vị bị che, đơn vị được liên kết với ‘dev / null.’ Bạn có thể liệt kê trạng thái của tất cả tệp đơn vị bằng lệnh - ‘ $ systemctl list-unit-files

2. Sau khi đơn vị docker được hiển thị , chúng tôi có thể khởi động trình cố định daemon bằng lệnh systemctl. docker daemon quản lý các đối tượng docker như Hình ảnh, Vùng chứa và các yêu cầu API Docker. Thực hiện lệnh dưới đây trên dòng lệnh.

systemctl start docker
[FIX] Không thể kết nối với Docker Daemon tại ‘unix:///var/run/docker.sock’

3. Để xác minh dịch vụ docker có đang hoạt động và đang chạy hay không . Chúng tôi sẽ sử dụng trạng thái systemctl , hiển thị trạng thái hiện tại của dịch vụ cụ thể. Thực thi lệnh bên dưới trên Terminal của bạn.

systemctl status docker
[FIX] Không thể kết nối với Docker Daemon tại ‘unix:///var/run/docker.sock’

Từ hình ảnh trên, chúng ta có thể thấy rằng docker đang hoạt động và đang chạy .

Giải pháp 2:Dọn dẹp dịch vụ "Không thành công docker kéo" và bắt đầu dịch vụ Docker

Có những trường hợp bạn có thể đóng Docker một cách bất ngờ khi đang kéo một vùng chứa. Những tình huống như vậy sẽ che khuất docker.service docker .socket các tập tin. Docker.socket là một tệp nằm tại ‘/var/run/docker.sock’ và được sử dụng để giao tiếp với Docker daemon. Chúng tôi sẽ cần bật mí các tệp hai đơn vị - docker .service và docker.daemon trước khi tiếp tục để khởi động docker.

  1. Khởi chạy Terminal và thực hiện các lệnh dưới đây:
systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service
[FIX] Không thể kết nối với Docker Daemon tại ‘unix:///var/run/docker.sock’

Nếu bạn vẫn gặp lỗi ngay cả sau khi thực hiện các lệnh bên dưới, chúng tôi cần phải xóa các tệp trong Vùng chứa thư mục trước khi khởi động lại Docker. Containerd là một tính năng được giới thiệu trong Docker 1.11 và được sử dụng để quản lý vòng đời của hình ảnh Docker.

2. Mở Terminal và thực hiện các lệnh bên dưới. Đảm bảo bạn biết mật khẩu gốc vì chúng tôi sẽ cần các đặc quyền nâng cao để thực thi các lệnh.

sudo su
service docker stop
cd /var/run/docker/libcontainerd
rm -rf containerd/*
rm -f docker-containerd.pid
service docker start
[FIX] Không thể kết nối với 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à daemon Docker lắng nghe các API Docker và quản lý các đối tượng Docker khác nhau. Dockerd có thể được sử dụng thay thế cho lệnh ‘ $ systemctl start docker ‘Cũng được sử dụng để khởi động trình nền Docker.

  1. Mở Thiết bị đầu cuối start dockerd bằng cách thực hiện lệnh dưới đây:
sudo dockerd
[FIX] Không thể kết nối với 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 bạn đang sử dụng hệ thống init SysV , thì lệnh systemctl sẽ không hoạt động với bạn. Chúng tôi sẽ cần sử dụng lệnh dịch vụ để khởi động trình nền docker .

  1. khởi chạy Thiết bị đầu cuối và thực thi các lệnh bên dưới:
sudo service --status-all
sudo service docker start
[FIX] Không thể kết nối với Docker Daemon tại ‘unix:///var/run/docker.sock’

Giải pháp 5:Khởi động Dịch vụ Docker với Snap

Nếu bạn đã cài đặt Docker bằng Trình quản lý gói Snap , bạn sẽ cần sử dụng lệnh snap để quản lý trình nền của docker.

Nói chung, Snap quản lý các dịch vụ của họ một cách tự động. Tuy nhiên, trong những trường hợp như lỗi này, nó sẽ cần đến sự can thiệp của thủ công. Một số đối số bạn có thể sử dụng với lệnh snap bao gồm dừng, bắt đầu và khởi động lại. Trong trường hợp của chúng tôi, chúng tôi sẽ sử dụng tham số start.

  1. Mở Terminal và thực hiện lệnh bên dưới để khởi động Docker .
sudo snap start docker
[FIX] Không thể kết nối với Docker Daemon tại ‘unix:///var/run/docker.sock’

2. Thực thi lệnh bên dưới để xác minh liệu dịch vụ Docker đã được bắt đầu hay chưa.

sudo snap services

Điều đó sẽ liệt kê tất cả các dịch vụ snap đang chạy .

[FIX] Không thể kết nối với Docker Daemon tại ‘unix:///var/run/docker.sock’

Nếu các lệnh trên không hiệu quả với bạn, hãy thử kết nối docker:home plug vì nó không được kết nối tự động theo mặc định. Sau khi hoàn tất, hãy bắt đầu dịch vụ Docker .

3. Khởi chạy Terminal và chạy các lệnh bên dưới:

sudo snap connect docker:home :home
sudo snap start docker
[FIX] Không thể kết nối với Docker Daemon tại ‘unix:///var/run/docker.sock’

Giải pháp 6:Khởi động Docker cho người dùng không có quyền Root P đặc quyền

Lỗi cũng có thể phát sinh do thiếu các đặc quyền nâng cao và người dùng không có quyền truy cập vào ‘unix:///var/run/docker.sock.’ May mắn là có một giải pháp. Chúng tôi sẽ xuất biến Docker Host sang localhost qua cổng 2375.

  1. Mở Terminal và chạy lệnh bên dưới:
export DOCKER_HOST=tcp://localhost:2375
[FIX] Không thể kết nối với 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 giải quyết được lỗi, thì khả năng cao là bạn có thể gặp lỗi cài đặt. Để cài đặt Docker chính xác trong hệ thống Linux của bạn, hãy làm theo các bước từ trang web chính thức của Docker.