На це питання вже відповіли, але ось додаткова інформація.
Незалежно від того, перебуваєте ви в Arch або іншому дистрибутиві, наприклад, Fedora або Ubuntu, Docker використовує файл сокета для спілкування. Коли ви запускаєте docker
команди, він використовує цей сокет для спілкування з демоном Docker. Звичайно, демон повинен працювати (і він за умовчанням часто відключений), але якщо ваш користувач не може отримати доступ до сокета, він також не зможе спілкуватися з демоном.
Ви спочатку встановите Docker з сховища дистрибутива. Деякі люди завантажують скрипт встановлення та передають його в оболонку ( curl ... | sh
), але рекомендується встановити його з сховища, щоб його можна було легко оновити.
Арка:
# pacman -S docker
Fedora:
# dnf install docker
Як було сказано вище, демон може бути відключений за замовчуванням. Якщо ви хочете використовувати Docker, демон повинен працювати.
Увімкніть його (так воно буде запущено під час завантаження):
# systemctl enable docker
Почніть зараз (або перезавантажте):
# systemctl start docker
Тепер, за замовчуванням (якщо група докера відсутня), сокетом Docker належить root:
# ls -la /var/run/docker.sock
srw-rw---- 1 root root 0 Apr 28 17:22 /var/run/docker.sock
Ось чому звичайний користувач не в змозі спілкуватися з демон-докером. Постійний користувач не має достатніх дозволів для доступу до сокета. Він не в змозі дістатися до демона, тому він припускає, що він не працює, і показує цю помилку:Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Ось чому багато людей просто запускають усі команди Docker як root, використовуючи sudo
. Але як описано в іншій відповіді, у Докера є свій механізм цього, тому використовувати судо не потрібно.
В ідеалі група, яка називається docker
, створюється при встановленні Docker. Однак, якщо ця група не існує при запуску демона, файл сокета належить root.
У деяких випадках ця група мала іншу назву, як dockerroot
у Fedora . Перевірте, grep docker /etc/group
чи є така група у вашій системі. Якщо ви вже використовуєте цю групу (ваш користувач у ній), вам потрібно буде налаштувати Docker для її використання:
У /etc/sysconfig/docker
додайте -G dockerroot
(примітка: це обхідний шлях, не найкраще рішення):
OPTIONS='--selinux-enabled -G dockerroot'
Після перезавантаження демона ваш користувач зможе отримати доступ до сокета:
# systemctl restart docker
# ls -la /var/run/docker.sock
srw-rw---- 1 root dockerroot 0 Apr 28 17:32 /var/run/docker.sock
В іншому випадку офіційним способом було б використання групи, що називається docker
. Якщо він існує, Docker автоматично використовуватиме його, тобто встановить групу сокетів у цю групу. Якщо його не існує, все, що вам потрібно зробити, це створити його і перезапустити демон:
# groupadd docker
# systemctl restart docker
Файлом сокета належить ця група:
# srw-rw---- 1 root docker 0 Apr 28 17:42 /var/run/docker.sock
Ваш користувач повинен бути в docker
групі, щоб мати доступ до сокета:
# usermod -aG docker (user)
Можливо, вам доведеться вийти із системи та знову увійти (або su - (user)
), запустіть, id
щоб побачити, чи є ви у групі.
Потім ви можете використовувати Docker без sudo / root:
$ docker version --format '{{.Server.Version}}'
1.9.1
Нарешті, слово попередження. Тільки надійні користувачі повинні дозволити контролювати ваш демон Docker . Див. Https://docs.docker.com/engine/security/security/ .
(Але, звичайно, це саме стосується і судо - у wheel
групі повинні бути лише надійні користувачі .)