Docker LinuxDocker Desktop

Docker: Контейнер Docker сразу завершается после запуска

  • Обновлено
  • Чтение ≈ 2 минуты

Краткий ответ

После docker run или docker compose up контейнер сразу переходит в Exited. Это не обязательно поломка Docker: контейнер обычно работает, пока жив основной процесс, указанный в ENTRYPOINT/CMD.

В этой статье
  1. Как выглядит неисправность
  2. Причины и признаки
  3. Пошаговое устранение
  4. Как проверить результат
  5. Если проблема осталась

#Как выглядит неисправность

После docker run или docker compose up контейнер сразу переходит в Exited. Это не обязательно поломка Docker: контейнер обычно работает, пока жив основной процесс, указанный в ENTRYPOINT/CMD.

#Причины и признаки

Возможная причинаКак узнатьЧто делать
Основной процесс завершилсяВ образе запускается короткая команда, а не серверExitCode=0 и нет ошибокЗапускать долгоживущий серверный процесс
Процесс завершился с ошибкойНе хватило настройки, файлов или библиотекНенулевой ExitCode и стек ошибки в logsИсправить указанную первопричину

#Пошаговое устранение

  1. 1. Найдите имя контейнераОткройте терминал Linux/macOS или PowerShell с работающим Docker и выполните docker ps -a. Найдите нужную строку по имени и времени создания; смотрите колонку STATUS. Если Docker сообщает permission denied, проверьте права доступа, не меняйте их глобально.
    Linux · Терминал (Bash)Команда
    Только чтение; показывает и остановленные контейнеры.
    docker ps -a
  1. 2. Узнайте код и причину выходаПодставьте реальное имя вместо ИМЯ: docker inspect --format ... ИМЯ. ExitCode 0 обычно означает нормальное завершение команды; OOMKilled=true — возможную нехватку памяти; ненулевой код — сбой процесса.
    Linux · Терминал (Bash)Команда
    Только чтение; образец имени нужно заменить.
    docker inspect --format '{{.State.Status}} exit={{.State.ExitCode}} oom={{.State.OOMKilled}}' ИМЯ
  1. 3. Посмотрите начало и конец журналаЗапустите docker logs --tail 100 ИМЯ. Найдите конкретную ошибку: ENOENT, отказ подключения к БД или отсутствие переменной. Не публикуйте журнал без удаления паролей/токенов.
    Linux · Терминал (Bash)Команда
    Последние 100 строк, без изменения состояния.
    docker logs --tail 100 ИМЯ
  1. 4. Проверьте главную команду образаПосмотрите docker inspect --format ... ИМЯ: Entrypoint и Cmd определяют процесс, жизнью которого управляет Docker. Если команда выполняет однократное действие и корректно завершается, статус Exited ожидаем; не подменяйте его sleep infinity.
    Linux · Терминал (Bash)Команда
    Только чтение конфигурации контейнера.
    docker inspect --format '{{json .Config.Entrypoint}} {{json .Config.Cmd}}' ИМЯ
  1. 5. Исправьте причину на тестовой копииДля отсутствующего файла исправьте путь/WORKDIR в Dockerfile, для неверной команды запуска — ENTRYPOINT/CMD, для отсутствующей настройки — конфигурацию Compose. Пересоберите тестовый образ по инструкции проекта; не редактируйте напрямую файловую систему действующего контейнера.
  1. 6. Запустите пробную копию и проверьтеДля Compose из каталога проекта выполните docker compose config и затем docker compose up -d ТЕСТОВЫЙ_СЕРВИС после согласования имени. Проверьте docker compose ps и docker compose logs --tail 50 ТЕСТОВЫЙ_СЕРВИС; если статус снова Exited, вернитесь к ExitCode/журналу.
    Linux · Терминал (Bash)Команда
    Проверка конфигурации и статуса; на разных версиях Compose имена сервиса отличаются.
    docker compose config
    docker compose ps

#Как проверить результат

Правильный результат: долгоживущая служба в состоянии Up и обслуживает запрос, а одноразовый контейнер завершается с ожидаемым кодом 0. При ненулевом коде исправляйте конкретное сообщение в logs.

#Если проблема осталась

Не повторяйте опасные действия на рабочем окружении. Сравните первоначальный симптом с новым состоянием, сохраните обезличенные сообщения и версии компонентов, проверьте резервную копию; перед изменением общей истории Git или данных/сети Docker обратитесь к ответственному администратору проекта.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.