Files
Dockerfile/docs/troubleshooting.md
2025-10-29 14:47:35 +03:00

352 lines
8.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🐛 Решение проблем
## Частые ошибки
### 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)