Làm thế nào để giải quyết vấn đề cấp phép cho docker trong ubfox?


35

Tôi đã cài đặt docker như mô tả ở đây . Tôi sử dụng Ubuntu Trusty 14.04 (LTS) (64-bit) . Mọi thứ trong quá trình cài đặt đều tốt. Lệnh $ sudo docker run -i -t ubuntu /bin/bashcũng hoàn thành tốt (sau khi tôi gõ "exit" trong bảng điều khiển đã mở. Nhưng khi tôi cố gắng làm điều gì khác, tôi nhận được "quyền bị từ chối". Ví dụ:

`$ sudo docker run -d -P training/webapp python app.py`

Giới thiệu lại Post http:///var/run/docker.sock/v1.12/containers/create: dial unix /var/run/docker.sock: permission denied

` docker info`

Giới thiệu lại Get http:///var/run/docker.sock/v1.12/info: dial unix /var/run/docker.sock: permission denied

Làm thế nào để giải quyết điều này? Tôi đã hiểu về vấn đề này nhưng tôi không thể tìm ra giải pháp cho trường hợp của mình.

Câu trả lời:


50

Thêm nhóm docker nếu nó không tồn tại.

$ sudo groupadd docker

Thêm người dùng được kết nối ${USER}vào nhóm docker. Thay đổi tên người dùng để phù hợp với người dùng ưa thích của bạn.

$ sudo gpasswd -a ${USER} docker

Khởi động lại daemon Docker:

$ sudo service docker restart # Or docker.io for older versions
# 18.04+ with snap:
$ sudo systemctl restart snap.docker.dockerd

Bạn nên đăng xuất và đăng nhập lại để cập nhật quyền của nhóm. Để tránh điều đó, bạn có thể chuyển sang một lớp con như sau. Hoặc sử dụng bất kỳ thủ thuật nào khác được đề cập trong câu hỏi này :

su - $USER

14
Tôi đã phải khởi động lại để có hiệu lực này.
obsoleter

8
Không phải khởi động lại, chỉ cần đăng xuất và đăng nhập.
Ajay Gautam

2
Thoát ra đã làm điều đó, ngay cả khi exec $SHELLkhông. Tôi quan tâm để biết cơ chế nào đăng xuất đã giải quyết vấn đề. Đây không phải là cửa sổ!
Darth Egregious 6/2/2016

1
Trong Fedora, trước tiên, bạn phải chỉnh sửa /etc/selinux/configvà đặt SELINUX=disabled, sau đó khởi động lại Linux
Junior M

1
Giải thích tuyệt vời! Bạn là nhất! :)
Francis Coleues

5

Nếu bạn đang chạy CentOS hoặc RedHat, trước tiên bạn có thể phải tắt Selinux bằng cách chạy:

setenforce 0

Eiter khởi động lại sau đó để tự động chạy lại hoặc chạy setenforce 1.


4

Tôi đã có cùng một vấn đề, do selinux. Bạn có thể kiểm tra xem selinux có phải là thủ phạm hay không:

  1. Vô hiệu hóa selinux: setenforce 0
  2. Đang thử lại

Nếu việc tắt selinux đã giải quyết vấn đề của bạn, đó không phải là lý do để khiến nó bị vô hiệu hóa:

  1. Kích hoạt selinux: setenforce 1
  2. Cho phép kết nối ổ cắm trong cấu hình selinux: setsebool docker_connect_any true
  3. Chạy container Docker của bạn với --priviledgedtùy chọn

3

Tôi giả sử, tên người dùng của bạn đã ở trong nhóm docker. Để kiểm tra điều này, ban hành lệnh dưới đây.

id -nG

Nếu không, bạn cần thêm người dùng của mình vào nhóm docker bằng lệnh bên dưới.

sudo groupadd docker
sudo usermod -aG docker $USER

Khi bạn thực thi lệnh sudo systemctl start docker, nó sẽ tạo ra một quá trình docker. Quá trình docker chứa dockerdchủ đề daemon. Lệnh cũng tạo docker.sockổ cắm Unix mặc định . Các docker.sockổ cắm liên tục được nghe bởi dockerdchủ đề daemon. Điều này làm cho bạn có thể thực hiện IPC cấp kernel với docker.pidquy trình. Để có thể sử dụng ổ cắm docker này, bạn cần có sự cho phép thích hợp từ cấp độ xử lý ( docker.pid) và cấp độ tệp ( docker.sock). Vì vậy, thực hiện dưới hai lệnh sẽ giải quyết vấn đề của bạn. sudo chmod a+rwx /var/run/docker.sock # You can provide just execute permission sudo chmod a+rwx /var/run/docker.pid


1

Theo phiên bản hiện tại, chúng tôi không cần thêm nhóm docker.
Nó tồn tại tự động bằng cách cài đặt. Bạn có thể kiểm tra bằng lệnh:

$ sudo groupadd docker
groupadd: group 'docker' already exists

Vì vậy, để quản lý Docker với tư cách là người dùng không root , chỉ cần thêm người dùng của bạn vào nhóm docker sau đó đăng xuất và đăng nhập lại để thành viên nhóm của bạn được đánh giá lại:

$ sudo usermod -aG docker $USER
$ logout

Để kiểm tra khi bạn đăng nhập lại

$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

Bạn thậm chí có thể buộc phải sử dụng GROUP:dockerlàm nhóm chính mới của mình:

$ sudo chown "$USER":"docker" /home/"$USER"/.docker -R
$ sudo chmod g+rwx "$HOME/.docker" -R
$ sudo usermod -g docker ${USER}
$ logout

Để kiểm tra khi bạn đăng nhập lại

$ id
uid=1001(<user_name>) gid=999(docker) groups=999(docker),...
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.