Execute this script to fix this:
#!/bin/bash
# Script para fazer downgrade do Docker Engine
# Uso: sudo ./docker-downgrade.sh [versão]
# Exemplo: sudo ./docker-downgrade.sh 5:27.5.1-1~ubuntu.22.04~jammy
set -e # Parar em caso de erro
# Cores para output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Versão padrão (você pode mudar aqui ou passar como argumento)
DEFAULT_VERSION="5:27.5.1-1~ubuntu.22.04~jammy"
VERSION="${1:-$DEFAULT_VERSION}"
echo -e "${YELLOW}=== Docker Engine Downgrade Script ===${NC}"
echo -e "Versão alvo: ${GREEN}$VERSION${NC}"
echo ""
# Verificar se está rodando como root
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}ERRO: Este script precisa ser executado como root (use sudo)${NC}"
exit 1
fi
# Mostrar versão atual
echo -e "${YELLOW}=== Versão atual do Docker ===${NC}"
docker version 2>/dev/null || echo "Docker não está rodando ou não está instalado"
echo ""
# Confirmar com o usuário
echo -e "${YELLOW}=== AVISO ===${NC}"
echo "Este script irá:"
echo " 1. Fazer backup da configuração atual"
echo " 2. Parar o Docker"
echo " 3. Remover a versão atual"
echo " 4. Instalar a versão $VERSION"
echo " 5. Bloquear atualizações automáticas"
echo ""
read -p "Deseja continuar? (s/N) " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Ss]$ ]]; then
echo -e "${RED}Operação cancelada pelo usuário${NC}"
exit 1
fi
# Verificar se há containers rodando
echo -e "${YELLOW}=== Verificando containers em execução ===${NC}"
RUNNING_CONTAINERS=$(docker ps -q 2>/dev/null | wc -l)
if [ "$RUNNING_CONTAINERS" -gt 0 ]; then
echo -e "${YELLOW}AVISO: Há $RUNNING_CONTAINERS container(s) em execução${NC}"
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
echo ""
read -p "Deseja parar os containers antes de continuar? (s/N) " -n 1 -r
echo ""
if [[ $REPLY =~ ^[Ss]$ ]]; then
echo "Parando containers..."
docker compose down 2>/dev/null || docker stop $(docker ps -q) 2>/dev/null || true
fi
fi
echo ""
# Backup da configuração
echo -e "${YELLOW}=== Fazendo backup da configuração atual ===${NC}"
BACKUP_DIR="/etc/docker.backup.$(date +%Y%m%d_%H%M%S)"
if [ -d "/etc/docker" ]; then
cp -r /etc/docker "$BACKUP_DIR"
echo -e "${GREEN}✓ Backup criado em: $BACKUP_DIR${NC}"
else
echo -e "${YELLOW}⚠Diretório /etc/docker não existe, pulando backup${NC}"
fi
echo ""
# Parar o Docker
echo -e "${YELLOW}=== Parando Docker ===${NC}"
systemctl stop docker.socket 2>/dev/null || true
systemctl stop docker 2>/dev/null || true
echo -e "${GREEN}✓ Docker parado${NC}"
echo ""
# Remover versão atual
echo -e "${YELLOW}=== Removendo versão atual ===${NC}"
apt-mark unhold docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 2>/dev/null || true
apt-get remove -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 2>/dev/null || true
echo -e "${GREEN}✓ Versão atual removida${NC}"
echo ""
# Verificar se a versão existe no repositório
echo -e "${YELLOW}=== Verificando disponibilidade da versão ===${NC}"
if ! apt-cache madison docker-ce | grep -q "$VERSION"; then
echo -e "${RED}ERRO: Versão $VERSION não encontrada no repositório${NC}"
echo ""
echo "Versões disponÃveis:"
apt-cache madison docker-ce | head -10
exit 1
fi
echo -e "${GREEN}✓ Versão encontrada no repositório${NC}"
echo ""
# Instalar versão especÃfica
echo -e "${YELLOW}=== Instalando versão $VERSION ===${NC}"
apt-get update -qq
apt-get install -y \
docker-ce=$VERSION \
docker-ce-cli=$VERSION \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
echo -e "${GREEN}✓ Nova versão instalada${NC}"
echo ""
# Bloquear atualizações automáticas
echo -e "${YELLOW}=== Bloqueando atualizações automáticas ===${NC}"
apt-mark hold docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
echo -e "${GREEN}✓ Pacotes bloqueados para atualização${NC}"
echo ""
# Iniciar Docker
echo -e "${YELLOW}=== Iniciando Docker ===${NC}"
systemctl start docker
systemctl enable docker
echo -e "${GREEN}✓ Docker iniciado${NC}"
echo ""
# Aguardar Docker inicializar
echo "Aguardando Docker inicializar..."
sleep 3
# Verificar instalação
echo -e "${YELLOW}=== Verificando instalação ===${NC}"
if docker version &>/dev/null; then
echo -e "${GREEN}✓ Docker está funcionando corretamente${NC}"
echo ""
docker version
else
echo -e "${RED}✗ ERRO: Docker não está funcionando corretamente${NC}"
echo "Verifique os logs com: sudo journalctl -u docker -n 50"
exit 1
fi
echo ""
echo -e "${GREEN}=== Downgrade concluÃdo com sucesso! ===${NC}"
echo ""
echo "Próximos passos:"
echo " 1. Se você parou os containers, inicie-os novamente com: docker compose up -d"
echo " 2. Para desbloquear atualizações futuras: sudo apt-mark unhold docker-ce docker-ce-cli"
echo " 3. Backup da configuração anterior em: $BACKUP_DIR"
echo ""