Контейнер Docker сразу останавливается: Exited (1), Exited (137), Restarting
Контейнер работает, пока работает программа внутри него. Остановилась программа — остановился и контейнер. Почему она остановилась, расскажут код выхода и логи.
Содержание 9
Как это выглядит
Команды на этой странице вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне. Команда docker run -d отработала без ошибок, а сайт не открывается. Посмотрите все контейнеры:
docker ps -aВ колонке STATUS у вашего контейнера одно из:
Exited (1) 5 seconds ago— программа остановилась, в скобках — её код выхода;Restarting (1) 3 seconds ago— программа падает, а Docker снова и снова её перезапускает: так работает политика перезапуска;Created— контейнер создан, но так и не запустился.
Шаг 1. Прочитайте логи
Почему программа остановилась, она пишет сама перед остановкой. В примерах контейнер называется web — подставьте имя своего контейнера. Имена видны в последней колонке NAMES команды docker ps -a.
docker logs --tail 50 webПоследние строки — самые важные. Ищите слова error, fatal, permission denied, not found. Если в логе exec format error, образ собран для другого процессора — разбор этой ошибки.
Шаг 2. Посмотрите код выхода
| Код | Что значит |
|---|---|
| 0 | Программа закончила работу без ошибок. Контейнеру нечего делать: его команда выполнилась и завершилась, а не работает постоянно |
| 1 и другие числа до 128 | Программа остановилась с ошибкой. Причина — в логах |
| 137 | Программу принудительно остановили сигналом KILL: 128 + 9. Например, не хватило памяти или контейнер остановили командой |
| 143 | Программу попросили завершиться сигналом TERM: 128 + 15 |
Коды больше 128 значат, что программу остановил сигнал: код минус 128 — номер сигнала.
Если код 137: не хватило памяти
docker inspect -f '{{.State.OOMKilled}}' webtrue — программу остановила система, потому что закончилась память. Посмотрите, сколько памяти на сервере свободно:
free -hЕсли контейнеру задан лимит памяти флагом --memory, увеличьте его. Если памяти мало на всём сервере — уменьшите аппетиты программы в её настройках или возьмите тариф с бо́льшим объёмом памяти.
Если контейнер даже не запустился
Тогда docker run сам выводит ошибку и завершается со своим кодом. Код покажет команда echo $?, выполненная сразу после docker run:
| Код | Что значит |
|---|---|
| 125 | Ошибка самого Docker: например, порт занят или имя занято |
| 126 | Команду в контейнере нельзя запустить: нет прав на файл или это папка |
| 127 | Команды в контейнере нет: executable file not found или no such file or directory |
Если контейнер перезапускается по кругу
Статус Restarting значит, что у контейнера включена политика перезапуска и программа падает снова и снова. Логи читайте так же — docker logs --tail 50 web. Чтобы остановить круг, пока ищете причину:
docker stop webИсправьте причину и запустите контейнер снова: docker start web, а для проекта на compose — docker compose up -d в его папке.
Чтобы контейнер поднимался после перезагрузки
Если контейнер остановился после перезагрузки сервера и в логах ошибок нет, ему не задана политика перезапуска. Как её включить — в статье VPS для разработчика: автозапуск после перезагрузки.
Тексты ошибок сверены с исходным кодом Docker 29.1.3 — эта версия ставится из пакетов Ubuntu 24.04. В Docker 28 и более старых версиях часть сообщений звучит иначе.
Источники
- Исходный код Docker 29.1.3: state.go — статусы Up, Restarting, Created и Exited.
- Исходный код runc 1.3.4: utils.go — код выхода 128 + номер сигнала.
- Исходный код Docker CLI 29.1.3: run.go — коды выхода 125, 126 и 127 у docker run.
- Документация Docker: docker run — публикация портов, флаг --rm и коды выхода.
- Справочник Linux: signal — номера сигналов: KILL — 9, TERM — 15.
Сверено 10 октября 2026 года.
Что почитать дальше
Проверено и обновлено: 10.10.2026