# 🐛 Решение проблем

## Частые ошибки

### 1. "missing separator. Stop."
**Причина:** В Makefile используются пробелы вместо табов.

**Решение:**
```bash
sed -i 's/^    /\t/' makefile
```

### 2. "docker: command not found"
**Причина:** Docker не установлен или не в PATH.

**Решение:**
```bash
# Установка Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

# Проверка
docker version
```

### 3. "unauthorized: authentication required"
**Причина:** Не выполнена авторизация в registry.

**Решение:**
```bash
make docker login REGISTRY=hub.cism-ms.ru
# или
docker login hub.cism-ms.ru
```

### 4. "No rule to make target 'commit'"
**Причина:** Использование старых команд без префикса группы.

**Решение:**
```bash
# Вместо: make commit
# Используйте: make git commit
```

### 5. "Образ не найден"
**Причина:** Указан неверный SRC_IMAGE или IMAGE не собран.

**Решение:**
```bash
# Проверка существующих образов
docker images

# Сборка образа
make docker build IMAGE=myapp TAG=latest
```

### 6. "Buildx: no builder instance"
**Причина:** Buildx не инициализирован.

**Решение:**
```bash
# Создание builder'а
make docker create-builder

# Использование builder'а
make docker use-builder
```

## Отладка

### Просмотр конфигурации
```bash
# Показать конфигурацию
make docker print-config

# Проверить образ
make docker inspect

# Просмотр логов
make docker build 2>&1 | tee build.log

# Проверка Docker daemon
docker info

# Проверка доступных образов
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
```

## Проблемы с памятью

### Увеличение лимита памяти для Docker
```bash
# В /etc/docker/daemon.json
{
  "default-ulimits": {
    "memlock": {
      "Hard": -1,
      "Name": "memlock",
      "Soft": -1
    }
  }
}
```

### Очистка неиспользуемых ресурсов
```bash
# Очистка неиспользуемых образов
docker image prune -f

# Очистка неиспользуемых контейнеров
docker container prune -f

# Полная очистка системы
docker system prune -a -f
```

## Проблемы с сетью

### Проверка сетевых настроек
```bash
# Проверка сетевых интерфейсов
docker network ls
docker network inspect bridge

# Тестирование подключения
make docker check RUN_CMD="ping -c 3 8.8.8.8"

# Проверка DNS
make docker check RUN_CMD="nslookup google.com"
```

### Настройка прокси
```bash
# Настройка прокси для Docker
mkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/http-proxy.conf << EOF
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080"
Environment="HTTPS_PROXY=http://proxy.example.com:8080"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker
```

## Проблемы с правами доступа

### Исправление прав на файлы
```bash
# Исправление прав на Makefile
chmod +x makefile
chmod 644 dockerfile

# Проверка прав пользователя
make docker check RUN_CMD="id && whoami"

# Добавление пользователя в группу docker
sudo usermod -aG docker $USER
newgrp docker
```

### Проблемы с SELinux (CentOS/RHEL)
```bash
# Временное отключение SELinux
sudo setenforce 0

# Постоянное отключение SELinux
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
sudo reboot
```

## Проблемы с производительностью

### Медленная сборка
```bash
# Сборка с подробным выводом
make docker build IMAGE=myapp TAG=v1.0.0 QUIET=0

# Анализ времени сборки
time make docker build IMAGE=myapp TAG=v1.0.0

# Сборка без кэша для диагностики
make docker build IMAGE=myapp TAG=v1.0.0 NO_CACHE=1
```

### Большой размер образа
```bash
# Анализ размера образа
docker history myapp:latest

# Анализ слоев
docker run --rm -it \
  -v /var/run/docker.sock:/var/run/docker.sock \
  wagoodman/dive:latest myapp:latest

# Сжатие образа
make docker save SRC_IMAGE=myapp:latest COMPRESS=1
```

## Проблемы с registry

### Ошибки авторизации
```bash
# Очистка кэша авторизации
docker logout
docker login

# Проверка конфигурации Docker
cat ~/.docker/config.json

# Удаление старых токенов
rm -rf ~/.docker/config.json
docker login
```

### Проблемы с SSL сертификатами
```bash
# Добавление недоверенного registry
echo '{"insecure-registries":["registry.example.com:5000"]}' | sudo tee /etc/docker/daemon.json

# Перезапуск Docker
sudo systemctl restart docker
```

## Проблемы с Git

### "Not a git repository"
```bash
# Инициализация Git репозитория
git init
git remote add origin <url>

# Проверка статуса
make git status
```

### "Git push failed"
```bash
# Проверка текущей ветки
git branch

# Проверка удаленного репозитория
git remote -v

# Принудительный push (осторожно!)
git push --force-with-lease origin main
```

## Проблемы с архивами

### Ошибка при загрузке архива
```bash
# Проверка целостности архива
sha256sum -c images/myapp_v1.0.0.tar.gz.sha256

# Проверка размера файла
ls -lh images/myapp_v1.0.0.tar.gz

# Пересоздание архива
make docker save SRC_IMAGE=myapp:latest COMPRESS=1
```

### Проблемы с разбиением на части
```bash
# Объединение частей архива
cat images/myapp_v1.0.0.tar.gz.part.* > images/myapp_v1.0.0.tar.gz

# Проверка целостности
sha256sum -c images/myapp_v1.0.0.tar.gz.sha256
```

## Диагностические команды

### Проверка системы
```bash
# Информация о системе
uname -a
cat /etc/os-release

# Информация о Docker
docker version
docker info

# Информация о Make
make --version

# Информация о Git
git --version
```

### Проверка ресурсов
```bash
# Использование диска
df -h

# Использование памяти
free -h

# Использование CPU
top -n 1

# Процессы Docker
ps aux | grep docker
```

### Логи системы
```bash
# Логи Docker
sudo journalctl -u docker.service

# Логи системы
sudo journalctl -f

# Логи сборки
tail -f logs/build_*.log
```

## Получение помощи

### Сбор информации для отчета об ошибке
```bash
# Создание отчета об ошибке
{
  echo "=== System Info ==="
  uname -a
  cat /etc/os-release
  
  echo -e "\n=== Docker Info ==="
  docker version
  docker info
  
  echo -e "\n=== Make Info ==="
  make --version
  
  echo -e "\n=== Git Info ==="
  git --version
  
  echo -e "\n=== Project Config ==="
  make docker print-config
  
  echo -e "\n=== Recent Logs ==="
  tail -20 logs/build_*.log 2>/dev/null || echo "No logs found"
} > bug_report.txt
```

### Полезные ресурсы
- [Docker Documentation](https://docs.docker.com/)
- [Make Documentation](https://www.gnu.org/software/make/manual/)
- [Git Documentation](https://git-scm.com/doc)
- [Stack Overflow](https://stackoverflow.com/questions/tagged/docker)
