#Что означает ошибка
exited with code 1
Сообщение «exited with code 1» в docker compose значит, что основной процесс контейнера завершился с ошибкой. Сам Docker здесь не виноват: нужно читать вывод приложения внутри контейнера. Код 1 — общий признак ошибки, а коды 137 и 139 указывают на нехватку памяти и segfault.
Первое действие — посмотреть логи сервиса.
Дальше определить, падает ли контейнер сразу или после работы.
Сервис завершился с ошибкой. Смотрите docker compose logs, проверьте переменные окружения, зависимости и порядок запуска.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Ошибка приложенияКод. | Выход 1. | Логи. |
| Нет переменных.env. | Выход. | Задайте. |
| БД не готоваПорядок. | Выход. | healthcheck. |
| Нет файлаТом. | Выход. | Проверьте. |
#Пошаговое решение
- Прочитайте логи сервисаВ каталоге с
compose.yamlоткройте терминал и выполнитеdocker compose ps -a: найдите сервис со статусомExited (1). Затемdocker compose logs --tail=100 --timestamps имя_сервиса, подставив точное имя из файла Compose (не имя контейнера). Прочитайте первые конкретные сообщения до строки об остановке: там часто находятся причины — отсутствие переменной, ошибки БД, файла, разрешений. Скопируйте диагностические строки, исключив пароли и ключи. - Запустите контейнер интерактивноЕсли лог заканчивается без подробной ошибки, посмотрите
docker compose configиdocker compose ps -a, затем выясните, какую команду сервис должен запускать. Для тестовой среды можно запустить контейнер с отдельной оболочкойdocker compose run --rm --entrypoint sh имя_сервиса, если образ содержитsh. Однакоrunможет запустить дополнительное приложение и не наследует все настройки публикации портов; не используйте этот способ на рабочей БД и очереди без понимания последствий. - Проверьте переменные окружения и томаОткройте
compose.yamlи относящийся к нему.envв редакторе. Проверьте значения переменных, пути к томам, существование файлов конфигурации и права пользователя процесса внутри контейнера. Командаdocker compose configпоказывает развёрнутую конфигурацию и может раскрывать секреты, поэтому не публикуйте полный вывод. Если ошибкаPermission denied, исправляйте владельца только конкретного каталога после сверки UID/GID, а не черезchmod 777. - Настройте порядок запускаЕсли ошибка связана с БД, которая ещё не успевает начать принимать подключения, отдельно проверьте
docker compose logs dbиdocker compose ps. Простоеdepends_onуправляет порядком запуска, но не всегда готовностью сервиса; для подходящих сервисов настройте корректныйhealthcheckи условиеservice_healthyсогласно поддерживаемому синтаксису Compose. Повторите проверку после пересоздания только нужных сервисов, а не всех контейнеров сервера. - Проверьте код выходаВ
docker compose ps -aпроверьте настоящий код выхода.1— общее завершение приложения с ошибкой;137часто связан с SIGKILL (включая нехватку памяти), а139— с SIGSEGV, но это не полный диагноз. Для подозрения на OOM посмотритеdocker inspectдля конкретного контейнера и системные журналы ядра, а не увеличивайте память вслепую. После исправления первопричины выполнитеdocker compose up -d имя_сервисаи посмотрите новые логи.
#Логи и состояние
Выполните docker compose logs --tail=100 имя_сервиса и docker compose ps -a. Для подробностей: docker inspect --format='{{.State.ExitCode}} {{.State.Error}}' контейнер. Если логи пустые, проверьте command/entrypoint в файле: неверный путь к скрипту даёт мгновенный выход. Запустите интерактивно: docker compose run --rm --entrypoint sh сервис, затем вручную запустите команду приложения.
#Типичные причины
Нет переменных окружения (.env не подхвачен или не указан env_file). Сервис стартует раньше базы данных: добавьте depends_on с condition: service_healthy и healthcheck. Занят порт (bind: address already in use). Нет прав на примонтированный том. Ошибка конфигурации приложения (неверный DSN, отсутствует файл). Для сборок проверьте docker compose build --no-cache.
#Ресурсы и платформа
Код 137 — убит по памяти (OOM): docker stats, увеличьте лимит mem_limit или память Docker Desktop. На Apple Silicon образ amd64 может падать: укажите platform: linux/amd64. На Windows с WSL2 проверьте окончания строк в скриптах (dos2unix script.sh), иначе будет ошибка exec format error или no such file.
# Из каталога соответствующего Compose-проектаdocker compose ps -a# Подставьте реальное имя службы из compose.yaml вместо appdocker compose logs --tail=100 --timestamps app# Для тестового окружения: docker compose run --rm --entrypoint sh appКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.