Сокет Pycharm Docker Unix / TCP (с unix: ///var/run/docker.sock): разрешение запрещено - PullRequest
0 голосов
/ 05 июля 2018

При попытке настроить Docker в выпуске PyCharm Professional появляется ошибка «Отказано в доступе». Я в Debian, Джесси (BunsenLabs).

Cannot connect: io.netty.channel.AbstractChannel$AnnotatedConnectException: connect(..) failed: Permission denied: /var/run/docker.sock
caused by: java.net.ConnectException: connect(..) failed: Permission denied

Это происходит как с настройками по умолчанию (с использованием сокета Unix), так и с сокетом TCP, URL-адрес Engine Engine = unix:///var/run/docker.sock (имеет ли смысл?).

Если мы посмотрим на разрешения для сокета:

$ ls -l /var/run/docker.sock
srw-rw---- 1 root docker 0 Jul  5 11:18 /var/run/docker.sock

Мы видим, что он принадлежит root и группе докеров.

Поэтому я попытался добавить своего пользователя в группу Docker (с помощью sudo usermod -a -G docker USERNAME) и перезапустил службу Docker (с помощью sudo service docker restart), но он все равно не работает.

Один из способов разрешить PyCharm использовать сокет - запустить его с правами root, т.е. sudo pycharm, но я бы хотел этого избежать. Я также смог исправить это, установив разрешения на чтение и запись для других в сокете (sudo chmod o+rw /var/run/docker.sock), но теперь каждый может использовать Docker на этом компьютере без прав администратора.

Какой самый безопасный способ разрешить PyCharm подключаться к сокету Docker?

Также обратите внимание, что Docker отлично работает в командной строке. До быстрого и грязного исправления (chmod o+rw) мне приходилось использовать sudo docker, и я обновил /etc/sudoers, чтобы не вводить пароль для этой команды. Теперь работает даже без sudo. Он не чувствует себя в безопасности, но это машина для разработки, поэтому, если нет другого решения, я оставлю его таким.

РЕДАКТИРОВАТЬ: Я добавляю дополнительную важную информацию.

Во-первых, добавление моего пользователя в группу Docker было действительно правильным решением. Дело в том, что при использовании sudo usermod изменения не сразу отражаются для используемой вами учетной записи. Вам необходимо выйти и снова войти, чтобы обновить систему. Дополнительная информация в этом сообщении и ответ: Добавление пользователя в группу, но не отображается при запуске "id" .

Во-вторых, добавление себя в группу Docker позволяет повысить привилегии! Любой пользователь, имеющий возможность запускать docker без sudo (и, следовательно, без ввода пароля), также сможет запускать контейнер с корневым каталогом системы, смонтированным в томе: docker run -v /:/host_root -it --rm ubuntu /bin/bash. Поскольку вы являетесь пользователем root в контейнере, это означает, что вы можете манипулировать хост-системой , как если бы вы были суперпользователем на хосте . Пожалуйста, примите это во внимание, прежде чем добавлять пользователей в группу Docker.

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Кажется, что моя первая попытка (добавить себя в группу docker) была правильной. Но для этого нужна перезагрузка.

Действительно, я был удивлен, что не увидел «docker» в выводе команды groups. После перезагрузки теперь отображается «докер».

Я сбросил разрешение сокета до того, что было раньше: sudo chmod o-rw /var/run/docker.sock.

PyCharm может успешно подключиться к сокету.

0 голосов
/ 19 июля 2018

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

id -nG

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

sudo groupadd docker
sudo usermod -aG docker $USER

Когда вы выполняете команду sudo systemctl start docker, она создает процесс Docker. Этот процесс докера содержит dockerd поток демона. Команда также создает по умолчанию docker.sock сокет Unix. Сокет docker.sock постоянно прослушивается потоком демона dockerd. Это позволяет выполнять IPC на уровне ядра с процессом docker.pid. Чтобы иметь возможность использовать этот док-сокет, вам необходимо иметь соответствующие разрешения на уровне процесса (docker.pid) и уровне файла (docker.sock). Таким образом, выполнение ниже двух команд должно решить вашу проблему.

sudo chmod a+rwx /var/run/docker.sock
sudo chmod a+rwx /var/run/docker.pid

Как видите, в PyCharm не отображается никаких ошибок. enter image description here

Примечание: запуск sudo dockerd -H unix:///var/run/docker.sock также делает то же самое, что описано выше.

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

остановка докера: sudo systemctl stop docker

dockerd -H tcp://127.0.0.1:2375 -H // Вы должны остановить Docker перед выполнением этой команды

запустить докер: sudo systemctl start docker

И, см. Ниже успешное соединение с док-станцией TCP в PyCharm. enter image description here

0 голосов
/ 05 июля 2018

Другой вариант, который стоит попробовать, это выставить вашего демона докера через интерфейс localhost tcp - ref

Ссылаясь на документы, вы можете написать свой /etc/docker/daemon.json так, что выглядит так:

{
"hosts": ["unix:///var/run/docker.sock", "tcp://127.0.0.1:2375"]
}

С этой настройкой вы можете попробовать перезапустить Docker и настроить TCP socket в настройках PyCharm.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...