Как исправить докер: получил разрешение на отказ

Я установил Docker на моей машине, где у меня установлена ОС Ubuntu. После чего я установил докер, когда я запускаю

sudo docker run hello-world

Все хорошо, но я хочу скрыть слово sudo, чтобы сделать команду более короткой.

Если я напишу команду без слова sudo

docker run hello-world

Это отображает следующее:

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.35/containers/create: dial unix /var/run/docker.sock: connect: permission denied.See 'docker run --help'.

Это случилось так же, когда я пытаюсь сделать

docker-compose up

Как я могу решить эту проблему?

Ответ 1

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

  1. Создайте группу докеров.
$ sudo groupadd docker
  1. Добавьте своего пользователя в группу Docker.
$ sudo usermod -aG docker $USER
  1. Выйдите из системы, войдите снова и запустите (это не работает, вам может потребоваться перезагрузить компьютер)
$ docker run hello-world

Взято из докера официальной документации: управлять-докер-а-а-некорневой пользователь

Ответ 2

После обновления я получил разрешение отказано. Выполнение шагов "mkb" после установки ничего не изменило, потому что мой пользователь уже был в группе "docker"; Я повторяю это дважды, но безуспешно.

После часа поиска наконец-то сработало следующее решение:

sudo chmod 666 /var/run/docker.sock

Решение пришло из Ольшанска.

Похоже, что при обновлении воссоздается сокет без достаточных разрешений для группы "Докер".

Проблемы

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

  • 1) Проблема с SystemD: сокет будет создан только с владельцем "root" и группой "root".

    Вы можете проверить эту первую проблему с помощью этой команды:

    ls -l /lib/systemd/system/docker.socket
    

    Если все это хорошо, вы должны видеть "root/docker", а не "root/root".

  • 2) Проблема с графическим входом в систему: https://superuser.com/questions/1348196/why-my-linux-account-only-belongs-to-one-group

    Вы можете проверить эту вторую проблему с помощью этой команды:

    groups
    

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

    sudo su $USER  -c groups
    

    если вы видите группу докеров, то это из-за ошибки.

Решения

Если вам удастся получить обходной путь для графического входа в систему, это должно помочь:

sudo chgrp docker /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket

Но если вы не можете справиться с этой ошибкой, неплохое решение может быть следующим:

sudo chgrp $USER /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket

Это работает, потому что вы находитесь в графической среде и, вероятно, единственный пользователь на вашем компьютере. В обоих случаях вам нужна перезагрузка (или sudo chmod 666 /var/run/docker.sock)

Ответ 3

  1. добавить группу докеров
$ sudo groupadd docker
  1. добавьте вашего текущего пользователя в группу Docker
$ sudo usermod -aG docker $USER

3. переключить сеанс в группу докеров

$newgrp - docker
  1. бежать
$docker run hello-world

Ответ 4

  1. Добавить текущего пользователя в группу docker
sudo usermod -aG docker $USER
  1. Измените права доступа к сокету докера, чтобы иметь возможность подключаться к демону докера /var/run/docker.sock
sudo chmod 666 /var/run/docker.sock

Ответ 5

Я решаю эту ошибку с помощью команды:

$ sudo chmod 666 /var/run/docker.sock

Ответ 6

используйте эту команду

sudo usermod -aG docker $USER

затем перезагрузите компьютер, это сработало для меня.

Ответ 7

lightdm и kwallet отправляются с ошибкой, которая, по-видимому, не проходит дополнительные группы при входе в систему. Чтобы решить эту проблему, я также, кроме sudo usermod -aG docker $USER, должен был закомментировать

auth optional pam_kwallet.so
auth optional pam_kwallet5.so

в

#auth optional pam_kwallet.so
#auth optional pam_kwallet5.so

в /etc/pam.d/lightdm перед перезагрузкой, чтобы группа Docker действительно имела эффект.

ошибка: https://bugs.launchpad.net/lightdm/+bug/1781418 и здесь: https://bugzilla.redhat.com/show_bug.cgi?id=1581495

Ответ 8

Чтобы исправить эту проблему, я искал, где установлен мой докер и сборщик докеров. В моем случае docker был установлен в /usr/bin/docker а docker-compose был установлен в /usr/local/bin/docker-compose path. Затем я пишу это в своем терминале:

Докер:

sudo chmod +x /usr/bin/docker

Для docker-compose:

sudo chmod +x /usr/local/bin/docker-compose

Теперь мне не нужно писать в моих командах докер слово sudo

/************************************************* **********************/

Errata:

Лучшее решение этой проблемы было прокомментировано @mkasberg. Я цитирую комментарий:

That might work, you might run into issues down the road. Also, it a security vulnerability. You'd be better off just adding yourself to the docker group, as the docs say. sudo groupadd docker, sudo usermod -aG docker $USER. Docs: https://docs.docker.com/install/linux/linux-postinstall/

Большое спасибо!

Ответ 9

Сообщение об ошибке сообщает, что ваш текущий пользователь не может получить доступ к модулю докера, потому что у вас нет прав доступа к сокету Unix для связи с механизмом.

В качестве временного решения вы можете использовать sudo для запуска неудачной команды от имени пользователя root (например, sudo docker ps). Однако рекомендуется исправить проблему, добавив текущего пользователя в группу Docker:

Запустите эту команду в вашей любимой оболочке, а затем полностью выйдите из своей учетной записи и снова войдите в систему (или выйдите из сеанса SSH и повторно подключитесь, если сомневаетесь, выйдите из системы и войдите в систему компьютера, на котором вы пытаетесь запустить докер!):

sudo usermod -a -G docker $ USER

Ответ 10

  Получено отказ в разрешении при попытке подключения к сокету демона Docker в unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: наберите unix/var/run/docker.sock: connect: разрешение отклонено

sudo chmod 666 /var/run/docker.sock

Это исправит мою проблему.

Ответ 11

chmod 0777/home/huginn/mysql-data

это мое решение.