База знаний Business Studio 7
Переход на сайт нейросети Perplexity AI для поиска информации о Business Studio. Подробнее о возможности см. по ссылке

Содержание справки

Ошибка «Container "..." is unhealthy»

Вопрос:

При запуске скрипта bs.sh возникает ошибка:

«ERROR: for <имя_контейнера> Container «<id_контейнера>» is unhealthy.
ERROR: Encountered errors while bringing up the project.»

В чем может быть причина данной ошибки и как ее устранить?

Ответ:

Данная ошибка означает, что контейнер <имя_контейнера> не прошел проверку состояния (healtchcheck) и сейчас находится в состоянии «unhealthy», см. Таблицу 1.

Сервис запущен, но не прошел проверку состояния. Из-за этого Docker останавливает поднятие всей системы.

Состояние Описание
healthy Сервис работает корректно
unhealthy Сервис не отвечает на healthcheck-запросы
starting Контейнер еще не успел пройти проверку (идет запуск)
Таблица 1. Типы состояний контейнеров (healtchcheck) и их описание

Внимание! Важно отличать результаты проверки состояния контейнера (healtchcheck) от результатов проверки статуса. Контейнер может быть в статусе UP (запущен), но при этом не готов к работе (unhealthy). Необходимо добиться состояния healthy для всех контейнеров.

Чтобы понять, какой именно сервис не прошел проверку, нужно проверить статусы всех контейнеров командой:

sudo docker ps -a

Пример вывода команды:

CONTAINER ID   NAME         STATUS
f700e37a2feb   bs-backend   Up 2 minutes (unhealthy)
a12b34c56d78   postgres     Up 10 minutes (healthy)

После обнаружения контейнера в состоянии unhealthy нужно посмотреть его логи:

sudo docker logs <имя_контейнера или id_контейнера>

Открыть логи контейнера, например postgresql, можно следующей командой: (ключ --tail N используется для ограничения вывода логов последними N строками):

sudo docker logs postgresql --tail 10

Пример вывода логов контейнера postgresql:

UTC [27] LOG:  checkpoint starting: time
UTC [27] LOG:  checkpoint complete: wrote 36 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=3.527 s, sync=0.059 s, total=3.681 s; sync files=11, longest=0.020 s, average=0.006 s; distance=262 kB, estimate=1975 kB; lsn=3/13AAC520, redo lsn=3/13AAC4E8

Наиболее вероятная причина почему healtcheck может не пройти - это нехватка ресурсов сервера (CPU/RAM).

Это может быть вызвано:

  1. Несоответствием системным требованиям, см. Системные требования.
  2. Запуском дополнительного ресурсоёмкого ПО.

Способы решения проблемы:

  • Увеличить время проверки healthcheck. Для этого нужно увеличить значение параметра start_period в файле docker-compose.yml (в блоке проблемного сервиса, в разделе healthcheck), как минимум, вдвое.
  • Отключить время проверки healthcheck. Для этого нужно закомментировать (символом # в начале строки) параметр start_period в файле docker-compose.yml (в блоке проблемного сервиса, в разделе healthcheck).
  • Увеличить ресурсы сервера.
  • Не запускать на сервере стороннее ресурсоёмкое ПО.