Как решить проблемы с разрешениями для докера в Ubuntu?

35

Я установил докер, как описано здесь . Я использую Ubuntu Trusty 14.04 (LTS) (64-разрядная версия) . Все во время установки было хорошо. Также команда $ sudo docker run -i -t ubuntu /bin/bashзавершается хорошо (после того, как я набрал «выход» в открытой консоли. Но когда я пытаюсь сделать что-то еще, я получаю «Отказано в доступе». Например:

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

Реуслс в Post http:///var/run/docker.sock/v1.12/containers/create: dial unix /var/run/docker.sock: permission denied

` docker info`

Реуслс в Get http:///var/run/docker.sock/v1.12/info: dial unix /var/run/docker.sock: permission denied

Как это решить? Я погуглил о проблеме, но не могу найти решение для своего случая.

вишня
источник

Ответы:

50

Добавьте группу докеров, если она еще не существует.

$ sudo groupadd docker

Добавьте подключенного пользователя ${USER}в группу Docker. Измените имя пользователя, чтобы оно соответствовало вашему предпочтительному пользователю.

$ sudo gpasswd -a ${USER} docker

Перезапустите демон Docker:

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

Вы должны выйти и снова войти, чтобы обновить права доступа группы. Чтобы избежать этого, вы можете переключиться на подоболочку следующим образом. Или используйте любой из других приемов, упомянутых в этом вопросе :

su - $USER
pyprism
источник
14
Я должен был перезагрузиться, чтобы это вступило в силу.
obsoleter
8
Не нужно перезагружаться, просто выйдите и войдите.
Аджай Гаутам
2
Выйти сделал это, даже когда exec $SHELLне сделал. Мне интересно узнать, каким механизмом выхода из системы решена проблема. Это не окна!
Дарт Egregious
1
В Fedora сначала нужно отредактировать /etc/selinux/configи поставить SELINUX=disabled, потом перезагрузить Linux
Junior M
1
Отличное объяснение! Ты лучший! :)
Фрэнсис Родригес
5

Если вы используете CentOS или RedHat, вам, возможно, придется сначала отключить SELinux, выполнив:

setenforce 0

Затем перезапустите Eiter, чтобы снова включить SELinux или запустить setenforce 1.

joelschmid
источник
4

У меня была такая же проблема, из-за selinux. Вы можете проверить, является ли selinux виновником:

  1. Отключение selinux: setenforce 0
  2. Повторная попытка

Если отключение selinux решило вашу проблему, не стоит оставлять его отключенным:

  1. Включить selinux: setenforce 1
  2. Разрешите подключение к сокету в конфигурации selinux: setsebool docker_connect_any true
  3. Запустите свой контейнер Docker с --priviledgedопцией
Пол Подгорсек
источник
3

Я предполагаю, что ваше имя пользователя уже находится в группе Docker. Чтобы проверить это, выполните команду ниже.

id -nG

Если нет, вам нужно добавить пользователя в группу Docker с помощью команды ниже.

sudo groupadd docker
sudo usermod -aG docker $USER

Когда вы выполняете команду sudo systemctl start docker, она создает процесс докера. Этот процесс докера содержит dockerdпоток демона. Команда также создает docker.sockсокет Unix по умолчанию . docker.sockГнездо непрерывно слушает dockerdдемона потока. Это позволяет вам выполнять IPC на уровне ядра с docker.pidпроцессом. Чтобы иметь возможность использовать этот док-сокет, вам необходимо иметь соответствующие разрешения от уровня процесса ( docker.pid) и уровня файла ( docker.sock). Таким образом, выполнение ниже двух команд должно решить вашу проблему. sudo chmod a+rwx /var/run/docker.sock # You can provide just execute permission sudo chmod a+rwx /var/run/docker.pid

Уддхав Гаутам
источник
1

По текущей версии нам не нужно добавлять группу docker.
Он существует автоматически при установке. Вы можете проверить, используя команду:

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

Таким образом, чтобы управлять Docker от имени пользователя, не являющегося пользователем root , просто добавьте своего пользователя в группу Docker, затем выйдите из системы и снова войдите в систему, чтобы повторно оценить членство в вашей группе:

$ sudo usermod -aG docker $USER
$ logout

Чтобы проверить это при входе в систему

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

Вы можете даже заставить использовать в GROUP:dockerкачестве своей новой основной группы:

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

Чтобы проверить это при входе в систему

$ id
uid=1001(<user_name>) gid=999(docker) groups=999(docker),...
Chetabahana
источник