3.0 KiB
3.0 KiB
Решение проблемы с Docker-контейнерами
Проблема
При запуске контейнеров через Docker Compose возникает ошибка KeyError: 'ContainerConfig'. Эта ошибка появляется из-за несовместимости между версиями Docker, Docker Compose и структурой docker-compose.yml.
Решение
1. Очистка окружения Docker
На сервере выполните следующие команды, чтобы полностью очистить окружение Docker:
# Остановка и удаление контейнеров
docker-compose down -v
# Принудительное удаление контейнеров по имени
docker rm -f postgres-tinder adminer-tinder telegram-tinder-bot
# Очистка неиспользуемых томов и сетей
docker system prune -f --volumes
# Очистка кеша Docker
docker builder prune -f
2. Исправление проблем с переносами строк
Файлы, созданные в Windows и перенесенные в Linux, могут содержать неправильные символы переноса строки.
# Исправление переносов строк в shell-скриптах
find . -name "*.sh" -type f -exec sh -c 'tr -d "\r" < "$1" > "$1.fixed" && mv "$1.fixed" "$1" && chmod +x "$1"' -- {} \;
3. Обновление docker-compose.yml
Создайте новый docker-compose.yml с исправленной структурой:
# Запустите скрипт для исправления проблем с Docker
./bin/fix_docker.sh
4. Запуск с полностью чистым окружением
После выполнения всех исправлений запустите контейнеры заново:
docker-compose up -d
Альтернативное решение
Если проблема сохраняется, можно попробовать запустить контейнеры по отдельности:
# Сначала запустить базу данных (если она нужна)
docker-compose up -d db
# Дождаться запуска базы данных
sleep 10
# Запустить бота
docker-compose up -d bot
# Запустить adminer
docker-compose up -d adminer
Проверка работы миграций
После запуска контейнеров проверьте, что миграции базы данных применяются правильно:
# Просмотр логов контейнера бота
docker logs telegram-tinder-bot
# Если миграции не применяются, можно запустить их вручную внутри контейнера
docker exec -it telegram-tinder-bot sh -c "DATABASE_URL=postgres://$DB_USERNAME:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME npx node-pg-migrate up"