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.
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.
- 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
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
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 và 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.
- 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
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
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.
- Mở Thiết bị đầu cuối và start dockerd bằng cách thực hiện lệnh dưới đây:
sudo dockerd
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 .
- 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
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.
- Mở Terminal và thực hiện lệnh bên dưới để khởi động Docker .
sudo snap start docker
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 .
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
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.
- Mở Terminal và chạy lệnh bên dưới:
export DOCKER_HOST=tcp://localhost:2375
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.