Як вирішити проблеми з дозволом докера в 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`

Reuslts в Post http:///var/run/docker.sock/v1.12/containers/create: dial unix /var/run/docker.sock: permission denied

` docker info`

Reuslts в Get http:///var/run/docker.sock/v1.12/info: dial unix /var/run/docker.sock: permission denied

Як це вирішити? Я гуглився з приводу проблеми, але не можу знайти рішення для своєї справи.

Відповіді:


50

Додайте групу докерів, якщо вона ще не існує.

$ sudo groupadd docker

Додайте підключеного користувача ${USER}до групи докерів. Змініть ім’я користувача, щоб відповідати бажаному користувачеві.

$ 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

14
Мені довелося перезавантажити, щоб це набуло чинності.
застарілий

8
Не потрібно перезавантажувати, просто вийдіть із системи та увійдіть у систему.
Аджай Гаутам

2
Вихід робив це, навіть коли exec $SHELLцього не робив. Мені цікаво знати, за яким механізмом виходу з системи вирішено проблему. Це не вікна!
Дарт Егрегійний

1
У Fedora спочатку потрібно відредагувати /etc/selinux/configта поставити SELINUX=disabled, а потім перезавантажити Linux
Junior M

1
Чудове пояснення! Ти кращий! :)
Френсіс Родрігес

5

Якщо ви працюєте з CentOS або RedHat, можливо, спершу слід відключити SELinux, запустивши:

setenforce 0

Після цього перезапустіть Eiter, щоб повторно ввімкнути SELinux або запустити setenforce 1.


4

У мене була така ж проблема, через selinux. Ви можете перевірити, чи є винуватцем selinux:

  1. Вимкнення selinux: setenforce 0
  2. Повторна спроба

Якщо відключення selinux вирішило вашу проблему, це не привід залишати її відключеною:

  1. Увімкнути selinux: setenforce 1
  2. Дозволити з'єднання сокета в конфігурації selinux: setsebool docker_connect_any true
  3. Запустіть свій контейнер Docker за допомогою --priviledgedпараметра

3

Я припускаю, ваше ім’я користувача вже в групі докерів. Щоб перевірити це, видайте команду нижче.

id -nG

Якщо ні, вам не потрібно додавати свого користувача в групу докера за допомогою команди нижче.

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 як некористувальним користувачем , просто додайте свого користувача в групу 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),...
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.