Узел контейнера docker перестает отвечать — как сделать узел независимым от контейнера?

#docker

#docker

Вопрос:

Как я могу предотвратить то, что узел docker перестанет отвечать, если контейнер docker находится под высокой нагрузкой?

Мой хост-сервер docker перестает отвечать в определенное время, и помогает только перезапуск. Мы предполагаем, что это происходит, когда контейнер docker выполняет задачи с интенсивным использованием процессора. Всякий раз, когда это происходит, я не могу войти на хост docker. Если я уже вошел в систему, я обычно не могу использовать оболочку; иногда я могу использовать оболочку с задержкой ввода символов около 10 минут.

Ответ №1:

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

По умолчанию контейнер не имеет ограничений на ресурсы и может использовать столько данного ресурса, сколько позволяет планировщик ядра узла. Docker предоставляет способы контролировать, сколько памяти или процессора может использовать контейнер, устанавливая флаги конфигурации времени выполнения docker run команды. В этом разделе содержится подробная информация о том, когда следует устанавливать такие ограничения и возможные последствия их установки.

Вот совершенно не исчерпывающий пример использования некоторых из этих флагов

 docker run -it --cpus="1.5" --memory="1g" ubuntu /bin/bash
  

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

Полный список всех этих флагов, позволяющих вам управлять ресурсами, доступен через https://docs.docker.com/config/containers/resource_constraints /

Комментарии:

1. для docker-compose это было бы что-то вроде mem_limit: 300m в docker-compose. файл yaml.

2. Для оценки правильного объема памяти docker stats -all может помочь.