Bạn có thể rất bối rối nếu một thiết bị đầu cuối Linux đưa ra lỗi “không thể kết nối với daemon Docker” cho bạn, vì nhiều khả năng daemon Docker đã chạy khi bạn thấy điều đó. Mặc dù bạn muốn đảm bảo rằng đúng như vậy, nhưng có thể bạn sẽ bối rối khi phát hiện ra rằng lỗi này thậm chí không liên quan đến việc dịch vụ chưa được khởi động. Nó chủ yếu nhắm vào những người dùng chưa tự thêm mình vào nhóm Docker.
Docker phát hành một nhóm người dùng riêng trên hệ thống Linux và những người có tài khoản người dùng chưa được thêm vào nhóm đó sẽ không thể kết nối với nhóm đó. Hãy nhớ rằng việc thêm tài khoản người dùng vào nhóm Docker có chức năng tương đương với root vì daemon luôn chạy với tư cách là người dùng root. Điều này có thể được mong đợi trên hệ thống Ubuntu Server một người dùng, nhưng chắc chắn đây sẽ là điều cần lưu ý đối với những người chạy Docker trên Arch, Fedora hoặc Debian.
Phương pháp 1:Kiểm tra trạng thái dịch vụ Docker
Mặc dù gần như chắc chắn là như vậy nhưng bạn sẽ cần kiểm tra xem dịch vụ Docker hiện có đang chạy hay không. Tại cửa sổ terminal, chạy systemctl status docker.service như một người dùng bình thường. Bạn sẽ nhận được một số thông tin về số PID mà daemon của Docker được chỉ định. Nếu không, bạn sẽ cần phải khởi động lại dịch vụ.
Nếu bạn đã khởi động lại nó, hãy thử làm bất cứ điều gì đã gây ra lỗi “không thể kết nối với daemon Docker”. Nếu bây giờ nó hoạt động thì có nghĩa là bạn chưa chạy dịch vụ và thực sự không cần phải lo lắng về bất cứ điều gì khác ngoài lý do dịch vụ không chạy. Thật không may, cách này không hiệu quả trong phần lớn các trường hợp nên bạn sẽ cần phải tiếp tục trong những trường hợp đó.
Phương pháp 2:Thêm người dùng vào nhóm Docker
Chạy thông tin docker từ dòng lệnh, thông thường sẽ báo lỗi “không thể kết nối với trình nền Docker” một lần nữa.
Nếu đúng như vậy thì bạn sẽ cần chạy sudo groupadd docker; sudo usermod -aG docker $USER để thêm chính bạn vào nhóm thích hợp. Nếu điều này gây ra lỗi do bạn không có usermod, thì bạn có thể sửa đổi lệnh để chạy dưới dạng docker sudo groupadd; sudo gpasswd -a $USER docker , nhưng điều này thường không thành vấn đề vì hầu hết các bản phân phối Linux cấp thương mại đều hoạt động với cùng một bộ công cụ. Trong mọi trường hợp, hãy chạy newgrp docker để bạn có thể đăng nhập vào nhóm docker mới nếu bạn chưa đăng nhập.
Hãy nhớ rằng điều này sẽ luôn thêm người dùng mà bạn hiện đang đăng nhập, đây không phải là vấn đề quá lớn đối với hầu hết hệ thống của những người không có nhiều tài khoản ngoài một người dùng và tài khoản gốc. Vì hiện tại bạn đã khóa quyền truy cập quản trị, hãy chạy sudo chgrp docker /usr/bin docker; sudo chgrp docker /var/run/docker.sock để sửa các quyền trên ổ cắm docker và lệnh. Thông thường, tệp socket chỉ thuộc về người dùng root nên thao tác này sẽ khắc phục điều đó.
Sau khi chạy nó, bạn sẽ không gặp bất kỳ khó khăn nào vì giờ đây nó thuộc cùng nhóm mà bạn đã tạo trong lệnh trước đó. Tuy nhiên, bạn sẽ muốn kiểm tra để đảm bảo rằng docker chạy mà không có sudo, vì vậy hãy nhập docker run hello-world với tư cách là người dùng thông thường để đảm bảo bạn không gặp phải bất kỳ lỗi nào khác.
Tại thời điểm này, rất ít người dùng vẫn nhận được bất kỳ loại thông báo lỗi nào. Hầu hết mọi thứ sẽ được khắc phục vào thời điểm này, nhưng nếu vẫn gặp sự cố, bạn có thể muốn đăng xuất hoàn toàn. Hãy thử mở một cửa sổ trình mô phỏng thiết bị đầu cuối khác, nhưng nếu cách này không hiệu quả, đôi khi bạn có thể tắt hệ thống để khởi động lại hoàn toàn nếu điều đó khả thi
Phương pháp 3:Sử dụng ACL để sửa đổi siêu dữ liệu Docker
Nếu bạn không muốn thuộc về một nhóm khiến bạn thích người dùng root thì bạn có thể đặt tệp socket chỉ hoạt động với một số quyền nhất định. Bạn có thể bỏ qua quy trình gpasswd nếu bạn muốn thực hiện theo cách này. Việc phải quét hệ thống tệp để tìm các mục ACL khác nhau là một gánh nặng đối với những người thực hiện kiểm tra bảo mật, nhưng điều đó giúp bạn không phải sử dụng hoàn toàn nhóm docker.
Nếu bạn muốn làm theo cách này, thì bạn có thể chạy sudo setfacl -m user:name:rw /var/run/docker.sock đồng thời thay thế người dùng và tên bằng các nhãn thích hợp. Điều này cấp quyền truy cập vào ổ cắm Docker tại /var/run/docker.sock, ổ cắm này sẽ hoạt động với Debian và Ubuntu Server.
GIỚI THIỆU TÁC GIẢ
Mũi tên Kevin
Kevin Arrows là một chuyên gia công nghệ giàu kinh nghiệm và hiểu biết với hơn một thập kỷ kinh nghiệm trong ngành. Anh có chứng chỉ Chuyên gia Công nghệ được Chứng nhận của Microsoft (MCTS) và có niềm đam mê sâu sắc trong việc cập nhật những phát triển công nghệ mới nhất. Kevin đã viết nhiều về nhiều chủ đề liên quan đến công nghệ, thể hiện chuyên môn và kiến thức của mình trong các lĩnh vực như phát triển phần mềm, an ninh mạng và điện toán đám mây. Những đóng góp của ông cho lĩnh vực công nghệ đã được các đồng nghiệp công nhận và tôn trọng rộng rãi, đồng thời ông được đánh giá cao nhờ khả năng giải thích các khái niệm kỹ thuật phức tạp một cách rõ ràng và ngắn gọn.