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