Câu hỏi này đã được trả lời, nhưng đây là một phần thông tin bổ sung.
Bất kể bạn đang ở trên Arch hay một bản phân phối khác như Fedora hay Ubuntu, Docker sử dụng tệp ổ cắm để liên lạc. Khi bạn chạy docker
các lệnh, nó sử dụng ổ cắm này để nói chuyện với daemon Docker. Tất nhiên, trình nền phải chạy (và nó thường bị tắt theo mặc định), nhưng nếu người dùng của bạn không thể truy cập vào ổ cắm, thì nó cũng không thể giao tiếp với trình nền.
Trước tiên bạn sẽ cài đặt Docker từ kho lưu trữ của bản phân phối. Một số người tải xuống tập lệnh cài đặt và chuyển nó sang shell ( curl ... | sh
), nhưng bạn nên cài đặt tập lệnh từ kho lưu trữ để có thể cập nhật dễ dàng.
Vòm:
# pacman -S docker
Fedora:
# dnf install docker
Như đã đề cập ở trên, daemon có thể bị tắt theo mặc định. Nếu bạn muốn sử dụng Docker, daemon phải được chạy.
Kích hoạt nó (vì vậy nó sẽ được bắt đầu khi khởi động):
# systemctl enable docker
Bắt đầu ngay bây giờ (hoặc khởi động lại):
# systemctl start docker
Bây giờ, theo mặc định (nếu thiếu nhóm docker), ổ cắm Docker được sở hữu bởi root:
# ls -la /var/run/docker.sock
srw-rw---- 1 root root 0 Apr 28 17:22 /var/run/docker.sock
Đây là lý do tại sao một người dùng thông thường không thể nói chuyện với daemon docker. Một người dùng thông thường không có đủ quyền truy cập vào ổ cắm. Nó không thể truy cập daemon, vì vậy nó giả sử nó không chạy và hiển thị lỗi này:Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Đây là lý do tại sao nhiều người chỉ cần bắt đầu tất cả các lệnh Docker là root, sử dụng sudo
. Nhưng như được mô tả trong câu trả lời khác, Docker có cơ chế riêng cho điều đó, vì vậy sử dụng sudo là không cần thiết.
Lý tưởng nhất, một nhóm được gọi docker
được tạo khi cài đặt Docker. Tuy nhiên, nếu nhóm đó không tồn tại khi daemon được khởi động, tệp socket được sở hữu bởi root.
Trong một số trường hợp, nhóm đó từng có một tên khác, như dockerroot
trên Fedora . Kiểm tra grep docker /etc/group
xem nếu có một nhóm như vậy trên hệ thống của bạn. Nếu bạn đã sử dụng nhóm đó (người dùng của bạn nằm trong nhóm đó), bạn sẽ cần định cấu hình Docker để sử dụng nhóm đó:
Trong /etc/sysconfig/docker
, thêm -G dockerroot
(lưu ý: đó là một cách giải quyết, không phải là giải pháp tốt nhất):
OPTIONS='--selinux-enabled -G dockerroot'
Sau khi khởi động lại daemon, người dùng của bạn sẽ có thể truy cập vào ổ cắm:
# systemctl restart docker
# ls -la /var/run/docker.sock
srw-rw---- 1 root dockerroot 0 Apr 28 17:32 /var/run/docker.sock
Nếu không, cách chính thức sẽ là sử dụng nhóm được gọi docker
. Nếu nó tồn tại, Docker sẽ tự động sử dụng nó, tức là đặt nhóm của socket thành nhóm đó. Nếu nó không tồn tại, tất cả những gì bạn cần làm là tạo nó và khởi động lại daemon:
# groupadd docker
# systemctl restart docker
Tệp ổ cắm sẽ được sở hữu bởi nhóm đó:
# srw-rw---- 1 root docker 0 Apr 28 17:42 /var/run/docker.sock
Người dùng của bạn phải ở trong docker
nhóm để có thể truy cập ổ cắm:
# usermod -aG docker (user)
Bạn có thể phải đăng xuất và đăng nhập lại (hoặc su - (user)
), chạy id
để xem bạn có thuộc nhóm không.
Sau đó, bạn có thể sử dụng Docker mà không cần sudo / root:
$ docker version --format '{{.Server.Version}}'
1.9.1
Cuối cùng, một lời cảnh báo. Chỉ người dùng đáng tin cậy mới được phép kiểm soát trình nền Docker của bạn . Xem https://docs.docker.com/engine/security/security/ .
(Nhưng tất nhiên, điều tương tự cũng đúng với sudo - chỉ những người dùng đáng tin cậy mới nên ở trong wheel
nhóm.)