Контейнеры с включенной проверкой работоспособности Docker останавливаются через некоторое время

Недавно я наблюдаю проблему с контейнерами Docker, в которых HEALTHCHECKнастроен. Не только собственные контейнеры, но и сторонние контейнеры.

Одни и те же контейнеры без настроенной проверки работоспособности работают нормально любое время.
См. Конфигурацию проверки работоспособности внизу сообщения.

Я также использую rediscommander/redis-commander образ для графического интерфейса Redis, который, по-видимому, имеет HEALTHCHECK внутри это Dockerfile. Большую часть времени я используюdocker-composeдля запуска моих проектов стал. инфраструктуры.

Все контейнеры с настроенной проверкой работоспособности (обаDockerfile или docker-composeспособами) через некоторое время останавливаются, даже если к ним не обращались / не использовались.

Под заглохшим я подразумеваю несколько вещей:

  1. docker ps контейнер отчетов up а также unhealthy. Однако скрипт проверки работоспособности все еще работает.
  2. Контейнер недоступен.
    • Любая попытка обратиться к нему заканчивается отказом в соединении, поэтому кажется, что внутри ничего не работает.
    • Оболочка не может быть прикреплена
    • Контейнер никак нельзя остановить / перезапустить / удалить. docker stop 123456abcd завершается с переданным идентификатором контейнера без ошибок, но безрезультатно.
    • Остановка службы докеров также не позволяет легко удалить контейнер. его каталог все еще смонтирован. Перезапуск служб докеров не решает проблему.
    • Служба контейнера не отвечает (например, на странице веб-сервера отображаетсяERR_SOCKET_NOT_CONNECTED)

Когда это происходит, я вижу постоянно увеличивающееся использование ЦП в процессеcontainerd-shim -namespace moby -workdir /var/lib/containerd/... которого тоже нельзя убить.

Я попытался найти возможное решение в сети, но не нашел ничего подходящего, кроме containerd/issue#3572 и не уверен, что это вообще актуально.

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

Любая помощь в решении этой проблемы приветствуется!


Моя конфигурация проверки работоспособности

Мои контейнеры настраиваются двумя способами:

  1. HEALTHCHECK с Dockerfile
  2. heathcheck с docker-compose.yml(Compose файл v3.4 используется)

Dockerfile HEALTHCHECK пример

HEALTHCHECK --interval=60s --timeout=1s --start-period=5s \
   CMD node /some/service1/healthcheck.js

докер-сочинять healthcheck пример

healthcheck:
  test: ["CMD", "/in/container/healthcheck.sh"]
  interval: 10s
  timeout: 2s

Информация о докере

# docker-compose --version

docker-compose version 1.26.2

# docker info

 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 Kernel Version: 5.7.17-2-MANJARO
 Operating System: Manjaro Linux
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 15.54GiB

0 ответов

Другие вопросы по тегам