Устранение неполадок

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

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

Устранение конфликтов между daemon.json и сценариями запуска.

Если вы используете файл daemon.json, а также передаете параметры команде dockerd вручную или с помощью сценариев запуска, и данные параметры конфликтуют, Docker не запускается с ошибкой, например:

unable to configure the Docker daemon with file /etc/docker/daemon.json:
the following directives are specified both as a flag and in the configuration
file: hosts: (from flag: [unix:///var/run/docker.sock], from file: [tcp://127.0.0.1:2376])

Если вы видите ошибку, подобную этой, и запускаете демон вручную с флагами, вам может потребоваться настроить флаги или daemon.json, чтобы устранить конфликт.

Примечание

Если вы видите эту конкретную ошибку, перейдите к следующий раздел для обходного пути.

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

Используйте ключ hosts в daemon.json с systemd

Одним из ярких примеров конфликта конфигурации, который трудно устранить, является ситуация, когда вы хотите указывает адрес демона, отличный от адреса по умолчанию. Docker по умолчанию слушает сокет. В системах Debian и Ubuntu, использующих systemd, это означает, что флаг хоста -H всегда используется при запуске dockerd. Если вы укажете запись hosts в daemon.json, это вызовет конфликт конфигурации (как в приведённом выше сообщении) и Docker не запустится.

Чтобы обойти эту проблему, создаёт новый файл /etc/systemd/system/docker.service.d/docker.conf со следующим содержимым, чтобы удаляет аргумент -H, который по умолчанию используется при запуске демона.

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd

В других случаях вам может понадобиться настроить systemd с помощью Docker, например настройка прокси HTTP или HTTPS.

Примечание

Если вы переопределите данный параметр, а затем не укажете запись hosts в флаге daemon.json или -H при запуске Docker вручную, Docker не запустится.

Выполните sudo systemctl daemon-reload, прежде чем пытаться запустить Docker. Если Docker запускается успешно, теперь он прослушивает IP-адрес, указанный в ключе hosts daemon.json, а не сокет.

Важно

Установка hosts в daemon.json не поддерживается в Docker Desktop для Windows или Docker Desktop для Mac.

Проблемы с нехваткой памяти

Если ваши контейнеры пытаются использовать больше памяти, чем доступно системе, вы можете столкнуться с исключением Out of Memory (OOM), и контейнер или демон Docker может быть остановлен убийцей OOM ядра. Чтобы этого не произошло, убедиться, что ваше приложение работает на хостах с достаточным объемом памяти и смотрите Понимание рисков нехватки памяти.

Проверяет, запущен ли Docker

Независимый от операционной системы способ проверяет, работает ли Docker, — это запросить Docker с помощью команды docker info.

Вы также можете использовать утилиты операционной системы, такие как sudo systemctl is-active docker или sudo status docker или sudo service docker status, или проверять состояние службы с помощью утилит Windows.

Наконец, вы можете проверяет в списке процессов процесс dockerd, используя такие команды, как ps или top.