1. Обзор
Docker помогает упаковать приложение и все его зависимости в легкий объект, известный как контейнеры. Мы можем развернуть контейнеры Docker на любой физической машине, виртуальной машине или даже в облаке.
Мы можем столкнуться с различными проблемами при использовании службы Docker в разных средах. В этом руководстве мы узнаем о проблеме подключения демона Docker. Это очень распространенная ошибка, с которой сталкиваются новички. Мы также рассмотрим причины этой проблемы и способы ее устранения.
2. Понимание проблемы
Рассмотрим ситуацию, когда мы пытаемся запустить команду в Linux , которой еще нет на машине. В ответ получаем сообщение об ошибке « команда не найдена ».
Причиной этой проблемы может быть либо то, что команда на самом деле не установлена на компьютере, либо она установлена, но неправильно настроена.
Давайте сначала разберемся с демоном Docker ( dockerd
). Это программа, которая управляет всеми объектами Docker, включая образы, контейнеры, тома и многое другое.
Другой объект, клиент Docker, помогает передать команду от пользователя службе Docker через демон Docker. При определенных обстоятельствах клиенту Docker не удается подключиться к демону Docker. В таком случае Docker выдает ошибку « Не удается подключиться к демону Docker
».
Могут быть разные причины, по которым клиент Docker не может подключиться к демону Docker. Давайте теперь углубимся в основную причину и различные решения для решения этой проблемы.
3. Из-за неактивной службы Docker
Наиболее распространенная причина этой ошибки — когда мы пытаемся получить доступ к службе Docker, но она не запущена:
$ docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock.
Is the docker daemon running?
Во-первых, мы проверим статус службы Docker, запущена она или нет:
$ systemctl status docker
docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: https://docs.docker.com
Здесь вывод ясно показывает, что служба Docker неактивна. Теперь мы запустим службу Docker. Это решит проблему в большинстве случаев.
3.1. Запустите Docker с помощью службы
Как правило, когда мы устанавливаем Docker с помощью диспетчера пакетов , он создает службу Docker. Это упрощает управление Docker. Теперь запустим Docker с помощью сервисной команды systemctl
:
$ systemctl start docker
Мы можем проверить статус Docker, используя следующую команду:
$ systemctl status docker
docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2022-02-17 19:14:51 UTC; 1min 38s ago
Docs: https://docs.docker.com
Main PID: 1831 (dockerd)
Tasks: 8
Memory: 126.5M
CGroup: /system.slice/docker.service
└─1831 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Эта команда показывает текущий статус службы Docker как активный (работает).
3.2. Запустите демон Docker вручную
Кроме того, мы также можем запустить Docker без службы. Все, что нам нужно сделать, это запустить команду dockerd
в фоновом режиме:
$ sudo dockerd
INFO[2022-02-18T05:19:50.048886666Z] Starting up
INFO[2022-02-18T05:19:50.050883459Z] libcontainerd: started new containerd process pid=2331
INFO[2022-02-18T05:19:50.050943756Z] parsed scheme: "unix" module=grpc
Нам нужно убедиться, что мы запускаем dockerd
с привилегиями Sudo.
4. Из-за недостаточных привилегий
Когда мы устанавливаем Docker с помощью диспетчера пакетов, он по умолчанию создает пользователя и группу Docker .
Чтобы получить доступ к Docker, нам нужно добавить текущего пользователя в группу docker
.
Если мы попытаемся получить доступ к сервису Docker от пользователя, не входящего в группу docker
, мы получим следующую ошибку:
$ docker ps
Got permission denied while trying to connect to the Docker daemon socket
at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/json:
dial unix /var/run/docker.sock: connect: permission denied
Чтобы решить эту проблему, мы можем сделать две вещи. Либо мы можем добавить пользователя в группу docker
, либо мы можем обновить привилегии файла сокета Docker. Давайте теперь углубимся в оба решения вместе с примерами.
4.1. Обновление привилегий пользователя
Привилегии пользователя — важная концепция в Linux. Он определяет доступность ресурсов для разных пользователей.
При установке Docker в Linux создается новая группа докеров
, и все пакеты, связанные со службой Docker, связываются с этой группой докеров .
Если мы не находим группу докеров по умолчанию на
нашей машине, мы можем создать ее вручную:
$ sudo groupadd docker
Приведенная выше команда создаст группу докеров
. Теперь мы добавим текущего пользователя в группу докеров
:
$ sudo usermod -aG docker docker-test
Здесь параметр -a
добавит пользователя docker-test
в группу docker
. Параметр -G
используется для упоминания имени группы.
Наконец, мы перезапустим службу Docker, чтобы изменения вступили в силу:
$ sudo service docker restart
4.2. Обновление привилегий файла сокета Docker
Мы также можем решить проблему, изменив владельца файла /var/run/docker.sock
:
$ sudo chown docker-test /var/run/docker.sock
Обратите внимание, что мы запускаем эту команду с привилегиями sudo. В противном случае разрешение для файла не будет обновляться.
5. Вывод
В этом руководстве мы узнали о часто встречающейся проблеме с подключением демона Docker.
Наконец, эта проблема возникает, когда служба Docker запущена неправильно или у нас нет необходимых прав пользователя для доступа к службе Docker.
Мы рассмотрели различные способы решения этой проблемы, добавив пользователя в группу докеров
и изменив разрешение файла sock .