← Назад к вопросам

Как посмотреть ошибки при сборке контейнера?

2.0 Middle🔥 112 комментариев
#Инструменты и DevOps

Комментарии (2)

🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как посмотреть ошибки при сборке контейнера

При разработке с использованием Docker и контейнеризации приложений (особенно при развертывании на Dokku или Kubernetes) часто возникают ошибки на этапе сборки образа. Знание методов диагностики критично для быстрого решения проблем.

Основные способы просмотра ошибок

1. Просмотр логов в реальном времени

При запуске docker build, все логи выводятся в консоль по умолчанию:

# Обычная сборка с просмотром логов
docker build -t my-app:latest .

# С флагом --progress для детальной информации (Docker 20.10+)
docker build --progress=plain -t my-app:latest .

2. Просмотр логов сборки Dokku

При развертывании на Dokku через git push dokku main, логи сборки выводятся прямо в консоль:

# Логи выводятся во время push
git push dokku main

# Если не видны, посмотри логи контейнера после сборки
dokku logs app-name --tail 200

# Полные логи с временем
dokku logs app-name -f

3. Docker Compose с выводом логов

# Сборка с выводом логов
docker-compose build --progress=plain web

# Если ошибка произошла, посмотри историю
docker-compose logs web

# Сборка и запуск с логами в реальном времени
docker-compose up --build web

4. Сохранение логов сборки в файл

# Перенаправить все логи в файл
docker build -t my-app:latest . > build.log 2>&1

# Затем просмотреть
cat build.log
tail -n 100 build.log

# С временем
docker-compose build web > build-$(date +%Y%m%d-%H%M%S).log 2>&1

5. Просмотр ошибок конкретного слоя контейнера

Если сборка упала на определенном слое, можно запустить контейнер до этого момента:

# Получить ID слоя из вывода сборки и запустить его
docker run -it <layer-id> /bin/bash

# Затем проверить содержимое и логи внутри контейнера
ls -la
cat package-lock.json
npm list

Практический пример для Next.js приложения

FROM node:18-alpine

WORKDIR /app

# Копируем package файлы
COPY package*.json ./

# Устанавливаем зависимости (здесь часто ошибки)
RUN npm ci --only=production

# Копируем исходный код
COPY . .

# Сборка Next.js (здесь часто ошибки компиляции)
RUN npm run build

# Запуск
EXPOSE 3000
CMD ["npm", "start"]

Если возникает ошибка на RUN npm run build, логи покажут точно что упало.

Диагностика типичных ошибок

# Проверить Dockerfile на синтаксические ошибки
docker build --progress=plain -t test:latest . 2>&1 | grep -i error

# Проверить, достаточно ли прав доступа
docker build --progress=plain -t test:latest . 2>&1 | grep -i permission

# Проверить, доступны ли зависимости
docker build --progress=plain -t test:latest . 2>&1 | grep -i "not found\|cannot find"

# Посмотреть последние 50 строк с ошибками
docker build -t test:latest . 2>&1 | tail -50

Использование buildkit для лучшей диагностики

# Использовать Docker buildkit (современный builder)
DOCKER_BUILDKIT=1 docker build -t my-app:latest .

# С детальным прогрессом
DOCKER_BUILDKIT=1 docker build --progress=plain -t my-app:latest .

Проверка после сборки

# Запустить контейнер и проверить, нормально ли он стартует
docker run --rm my-app:latest npm list

# Проверить слои и их размер
docker history my-app:latest

# Провести инспекцию образа
docker inspect my-app:latest

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