Bạn có thể rất bối rối nếu terminal Linux ném lỗi "cannot connect to the Docker daemon" ở bạn, vì nhiều khả năng Docker daemon đã chạy khi bạn thấy lỗi. Mặc dù bạn muốn đảm bảo nó đang chạy, bạn sẽ bối rối khi biết lỗi này thậm chí không liên quan đến dịch vụ chưa khởi động. Nó chủ yếu ném cho user chưa thêm mình vào nhóm Docker.
Docker cấp một nhóm user riêng trên hệ thống Linux, và những ai có tài khoản user không được thêm vào nhóm đó sẽ không thể kết nối. Hãy nhớ việc thêm tài khoản user vào nhóm Docker về mặt chức năng tương đương root vì daemon luôn chạy như user root. Điều này có thể mong đợi trên hệ thống Ubuntu Server single-user, nhưng chắc chắn cần lưu ý cho những ai 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 nó đang chạy, bạn cần kiểm tra xem dịch vụ Docker hiện đang chạy không. Ở cửa sổ terminal, chạy systemctl status docker.service như user bình thường. Bạn nên nhận thông tin về PID number mà Docker daemon được gán. Nếu không, bạn cần khởi động lại dịch vụ.
Nếu bạn đã khởi động lại, thử làm bất cứ việc gì ném lỗi "cannot connect to the Docker daemon" cho bạn. Nếu giờ hoạt động, nghĩa là bạn chỉ chưa chạy dịch vụ và không cần lo lắng gì ngoài lý do nó không chạy. Rất tiếc, điều này không hoạt động trong đa số trường hợp nên bạn cần chuyển sang phương pháp khác.
Phương Pháp 2: Thêm User Vào Nhóm Docker
Chạy docker info từ dòng lệnh, thường sẽ cho lỗi "cannot connect to the Docker daemon" lại lần nữa.
Nếu是这样, bạn cần chạy sudo groupadd docker; sudo usermod -aG docker $USER để thêm mình vào nhóm đúng. Nếu báo lỗi vì không có usermod, bạn có thể sửa lệnh thành sudo groupadd docker; sudo gpasswd -a $USER docker, nhưng thường không phải vấn đề vì hầu hết distro Linux thương mại dùng cùng bộ công cụ. Trong mọi trường hợp, chạy newgrp docker để đăng nhập vào nhóm docker mới nếu chưa.
Lưu ý này luôn thêm user bạn đang đăng nhập, không nên là vấn đề lớn trên hầu hết hệ thống không có nhiều tài khoản ngoài user và root. Vì bạn có quyền admin keyed in, chạy sudo chgrp docker /usr/bin docker; sudo chgrp docker /var/run/docker.sock để sửa quyền trên docker socket và lệnh. Thường file socket chỉ thuộc user root nên điều này sẽ sửa lại.
Sau khi chạy, bạn không nên gặp rắc rối vì nó giờ thuộc cùng nhóm bạn tạo ở lệnh trước. Bạn muốn test đảm bảo docker chạy không cần sudo, nên gõ docker run hello-world như user thường để chắc chắn không còn lỗi khác.
Lúc này, rất ít user vẫn nhận thông báo lỗi. Hầu hết nên đã sửa xong, nhưng nếu vẫn gặp vấn đề, bạn có thể logout hoàn toàn. Thử mở cửa sổ terminal emulator khác, nhưng nếu không hoạt động, đôi khi khởi động lại hệ thống hoàn toàn giúp nếu có thể.
Phương Pháp 3: Dùng ACL Để Sửa Đổi Metadata Docker
Nếu bạn không muốn thuộc nhóm làm cho bạn như user root, bạn có thể thiết lập file socket chỉ hoạt động với quyền nhất định. Bạn có thể bỏ qua quy trình gpasswd nếu thích cách này. Việc quét hệ thống file cho các entry ACL khác là gánh nặng cho người audit bảo mật, nhưng nó ngăn bạn dùng nhóm docker hoàn toàn.
Nếu bạn muốn làm cách này, chạy sudo setfacl -m user:name:rw /var/run/docker.sock thay user và name bằng nhãn phù hợp. Điều này cấp quyền truy cập Docker socket tại /var/run/docker.sock, hoạt động với Debian và Ubuntu Server.
VỀ TÁC GIẢ

Kevin Arrows
Kevin Arrows là chuyên gia công nghệ giàu kinh nghiệm và kiến thức với hơn một thập kỷ kinh nghiệm trong ngành. Anh持有 chứng chỉ Microsoft Certified Technology Specialist (MCTS) và có đam mê sâu sắc về việc cập nhật các 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 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. Đóng góp của anh cho lĩnh vực công nghệ đã được công nhận và tôn trọng rộng rãi bởi đồng nghiệp, và anh được đánh giá cao về 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à súc tích.