#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
может помочь.