Статус Up значит, что процесс жив. Здесь — как узнать, что он ещё и отвечает.
Ключ healthcheck задаёт команду, которую Docker запускает внутри контейнера по расписанию. Код 0 — проверка прошла, несколько неудач подряд — контейнер нездоров.
Итог видно в docker compose ps: Up 7 seconds (healthy) или Up 15 seconds (unhealthy). localhost в проверке — сам контейнер. Нездоровый контейнер Docker не перезапускает: тот работает дальше с пометкой.
С проверкой depends_on умеет ждать здоровья соседа — condition: service_healthy под именем сервиса. Тогда up -d запускает зависимый сервис только после Healthy у соседа. Если сосед так и не стал здоровым, up -d печатает dependency failed to start: container … is unhealthy и выходит с кодом 1.
Проверка здоровья api три раза подряд не прошла, в ps — (unhealthy). Что Docker сделает с контейнером?
-
Остановленный контейнер был бы
Exited. Нездоровый остаётсяUp— с пометкой(unhealthy). -
Политика перезапуска срабатывает, когда процесс завершился. Здесь процесс жив: в
ps—Up … (unhealthy), и число перезапусков не растёт. -
Пересоздаёт контейнеры
docker compose up -d, и то после правки описания. Сам Docker нездоровый контейнер только помечает.
Проверка здоровья только ставит пометку: процесс жив, и контейнер работает дальше как Up … (unhealthy). Пометку видят ps и depends_on с condition: service_healthy.
Главное в шаге
-
healthcheck— команда внутри контейнера; итог виден вpsкак(healthy)или(unhealthy). - Нездоровый контейнер продолжает работать: Docker его только помечает.
-
depends_onсcondition: service_healthyзапускает сервис после здорового соседа.