← Назад к вопросам
Как проверить вхождение свойства в объект с прототипом?
2.0 Middle🔥 181 комментариев
#JavaScript Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Просмотр ошибок при сборке Docker контейнера
При разработке приложений, которые деплоятся через Docker, часто нужно отладить ошибки во время сборки образа. Существует несколько способов просмотра логов и отладки процесса сборки.
Основные команды для просмотра ошибок
1. Стандартный способ - сборка с выводом
# Базовая сборка с просмотром всех логов
docker build -t my-app:latest .
# С тегом и verbose выводом
docker build -f Dockerfile -t myapp:v1.0 .
# Без кеша (принудительная пересборка всех слоев)
docker build --no-cache -t my-app:latest .
# С progress output для более подробной информации
docker build --progress=plain -t my-app:latest .
Просмотр логов сборки
# Docker desktop - смотри в интерфейсе
# CLI - полный вывод с ошибками в консоли
docker build -t app:latest . 2>&1 | tee build.log
# После сборки посмотри файл
cat build.log | grep -i error
Отладка с использованием промежуточного контейнера
# Если сборка упала на определенном шаге:
# 1. Определи номер последнего успешного слоя
docker build -t app:latest . 2>&1
# 2. Запусти контейнер с этого слоя для отладки
docker run -it sha256:hash_from_error bash
# 3. Внутри контейнера проверь что-то
npm --version
node --version
ls -la
Пример Dockerfile с отладкой
FROM node:20-alpine
WORKDIR /app
# Слой 1 - копирование зависимостей
COPY package*.json ./
RUN npm ci --only=production
# Слой 2 - копирование исходного кода
COPY src ./src
COPY public ./public
# Слой 3 - сборка
RUN npm run build
# Если что-то упадет, Docker покажет номер слоя
# Ты сможешь запустить промежуточный контейнер и отладить
EXPOSE 3000
CMD ["npm", "start"]
Инструменты для отладки
Использование BuildKit (более информативные ошибки)
# Включи BuildKit для лучших отчетов об ошибках
DOCKER_BUILDKIT=1 docker build -t app:latest .
# Или с progress output
docker build --progress=plain -t app:latest .
Логирование внутри Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
# Выведи версии для отладки
RUN echo "Node version:" && node --version
RUN echo "NPM version:" && npm --version
# Инсталляция с подробным выводом
RUN npm ci --verbose 2>&1 | tee npm-install.log
# Проверка установленных пакетов
RUN npm ls 2>&1 | head -20
COPY src ./src
RUN npm run build || (echo "Build failed!" && exit 1)
Docker Compose для локальной разработки
version: "3.9"
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
volumes:
- ./src:/app/src # Hot reload
environment:
- NODE_ENV=development
Сборка с compose:
# Сборка с выводом
docker-compose build --no-cache
# Запуск с логами
docker-compose up --build
# Посмотри логи отдельного сервиса
docker-compose logs app
Частые ошибки и решения
1. Ошибка npm install
# Проверь версию Node
RUN node --version
# Используй npm ci вместо npm install для production
RUN npm ci --only=production
# Если проблема с правами - используй npm cache
RUN npm cache clean --force
2. Ошибка сборки (build fails)
# Добавь -v для verbose
RUN npm run build -v
# Или выведи debug информацию
RUN npm run build 2>&1 | tee build.log
RUN cat build.log
3. Недостаток памяти при сборке
# Увеличь память для Node
ENV NODE_OPTIONS=--max_old_space_size=4096
RUN npm run build
Проверка уже собранного образа
# Посмотри историю слоев
docker history my-app:latest
# Инспектируй образ
docker inspect my-app:latest
# Запусти bash внутри образа для отладки
docker run -it my-app:latest bash
Лучшие практики для минимизации ошибок
- Используй .dockerignore для исключения лишних файлов
node_modules
npm-debug.log
.git
.env
dist
.next
- Многоступенчатая сборка для меньшего финального образа
FROM node:20 as builder
WORKDIR /app
COPY . .
RUN npm ci && npm run build
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
CMD ["node", "dist/index.js"]
- Пинируй версии для reproducible builds
FROM node:20.10.0-alpine
Правильная отладка ошибок Docker — это навык, который экономит часы времени при разработке и деплое приложений.