Files
OllaHub/lib/docker-problems.ts
2026-02-22 14:06:01 -03:00

627 lines
20 KiB
TypeScript

export interface ProblemSolution {
id: string;
problem: string; // Texto exato ou padrão para matching
os: 'windows' | 'linux' | 'macos' | 'all';
links: Array<{
title: string;
url: string;
}>;
commands?: {
title: string;
code: string;
description?: string;
}[];
description?: string;
}
export const PROBLEM_SOLUTIONS: ProblemSolution[] = [
// ========== WINDOWS ==========
{
id: 'windows-build-old',
problem: 'Windows build',
os: 'windows',
description: 'Versão do Windows muito antiga. É necessário Windows 10 20H1 (build 19041) ou superior, ou Windows 11.',
links: [
{
title: 'Instalar Atualizações do Windows',
url: 'https://support.microsoft.com/windows/install-windows-updates-3c5ae7fc-9fb6-9af1-1984-b5e0412c556a'
},
{
title: 'Baixar Windows 10',
url: 'https://www.microsoft.com/software-download/windows10'
},
{
title: 'Baixar Windows 11',
url: 'https://www.microsoft.com/software-download/windows11'
}
],
commands: [
{
title: 'Verificar build atual',
code: '[System.Environment]::OSVersion.Version',
description: 'Execute no PowerShell para verificar a versão atual do Windows'
}
]
},
{
id: 'windows-vm-platform',
problem: 'VirtualMachinePlatform não habilitado',
os: 'windows',
description: 'A plataforma de máquina virtual precisa estar habilitada para suportar WSL 2.',
links: [
{
title: 'Microsoft Learn - WSL Manual Install',
url: 'https://learn.microsoft.com/windows/wsl/install-manual'
}
],
commands: [
{
title: 'Habilitar VirtualMachinePlatform (PowerShell como Administrador)',
code: 'dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart',
description: 'Execute no PowerShell como Administrador. Reinicie o sistema após a execução.'
}
]
},
{
id: 'windows-wsl-not-enabled',
problem: 'WSL não habilitado',
os: 'windows',
description: 'Windows Subsystem for Linux precisa estar habilitado para executar Docker no Windows.',
links: [
{
title: 'Microsoft Learn - Instalar WSL',
url: 'https://learn.microsoft.com/windows/wsl/install'
},
{
title: 'Microsoft Learn - WSL Manual',
url: 'https://learn.microsoft.com/windows/wsl/install-manual'
}
],
commands: [
{
title: 'Habilitar WSL (PowerShell como Administrador)',
code: 'dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart',
description: 'Execute no PowerShell como Administrador. Reinicie o sistema após a execução.'
}
]
},
{
id: 'windows-wsl2-not-configured',
problem: 'WSL 2 não configurado',
os: 'windows',
description: 'WSL 2 precisa ser configurado como versão padrão do WSL.',
links: [
{
title: 'Microsoft Learn - Instalar WSL',
url: 'https://learn.microsoft.com/windows/wsl/install'
},
{
title: 'Microsoft Learn - WSL Manual',
url: 'https://learn.microsoft.com/windows/wsl/install-manual'
}
],
commands: [
{
title: 'Configurar WSL 2 como padrão',
code: 'wsl --set-default-version 2',
description: 'Execute após habilitar WSL e VirtualMachinePlatform e reiniciar o sistema.'
},
{
title: 'Comandos completos (PowerShell como Administrador)',
code: `# Habilitar WSL
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# Habilitar Virtual Machine Platform
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# Reiniciar e depois definir WSL 2 como padrão
wsl --set-default-version 2`,
description: 'Execute todos os comandos em sequência. Reinicie após os dois primeiros comandos.'
}
]
},
{
id: 'windows-ram-insufficient',
problem: 'RAM insuficiente',
os: 'windows',
description: 'Sistema requer no mínimo 4GB de RAM para executar Docker no Windows.',
links: [
{
title: 'Adicionar mais memória ao computador',
url: 'https://support.microsoft.com/windows/add-more-memory-to-your-computer-0f7e2d8a-d2c9-c858-5dca-8d3b3759a0ff'
}
],
commands: [
{
title: 'Verificar processos consumindo mais memória',
code: 'Get-Process | Sort-Object -Property WS -Descending | Select-Object -First 10',
description: 'Lista os 10 processos que mais consomem memória. Feche aplicativos desnecessários.'
}
]
},
{
id: 'windows-disk-insufficient',
problem: 'Espaço em disco insuficiente',
os: 'windows',
description: 'É necessário pelo menos 10GB de espaço livre em disco para instalar e executar Docker.',
links: [
{
title: 'Liberar espaço em disco no Windows',
url: 'https://support.microsoft.com/windows/free-up-drive-space-in-windows-85529ccb-c365-490d-b548-831022bc9b32'
}
],
commands: [
{
title: 'Abrir Limpeza de Disco',
code: 'cleanmgr.exe',
description: 'Abre a ferramenta de limpeza de disco do Windows.'
}
]
},
{
id: 'windows-cpu-cores',
problem: 'CPU cores insuficientes',
os: 'windows',
description: 'Recomenda-se pelo menos 2 cores de CPU para melhor desempenho.',
commands: [
{
title: 'Verificar número de cores lógicos',
code: '(Get-WmiObject Win32_Processor).NumberOfLogicalProcessors',
description: 'Mostra o número de processadores lógicos disponíveis.'
}
]
},
// ========== LINUX ==========
{
id: 'linux-kernel-old',
problem: 'Kernel',
os: 'linux',
description: 'Kernel Linux muito antigo. É necessário kernel 3.10 ou superior para executar Docker.',
links: [
{
title: 'Ubuntu/Debian - Gerenciamento de Pacotes',
url: 'https://ubuntu.com/server/docs/package-management'
},
{
title: 'Arch/Manjaro - Kernel',
url: 'https://wiki.archlinux.org/title/Kernel'
},
{
title: 'Fedora/RHEL - Kernel',
url: 'https://docs.fedoraproject.org/en-US/quick-docs/kernel/'
}
],
commands: [
{
title: 'Ubuntu/Debian - Atualizar sistema e kernel',
code: `sudo apt update && sudo apt upgrade -y
sudo apt install linux-generic`,
description: 'Atualiza todos os pacotes e instala o kernel genérico mais recente.'
},
{
title: 'Arch/Manjaro - Atualizar kernel',
code: 'sudo pacman -Syu linux',
description: 'Atualiza o sistema e o kernel.'
},
{
title: 'Fedora - Atualizar kernel',
code: 'sudo dnf upgrade kernel',
description: 'Atualiza o kernel para a versão mais recente.'
}
]
},
{
id: 'linux-curl-missing',
problem: 'Pacote curl não instalado',
os: 'linux',
description: 'O pacote curl é necessário para baixar arquivos e chaves GPG durante a instalação do Docker.',
links: [
{
title: 'curl.se - Download oficial',
url: 'https://curl.se/download.html'
},
{
title: 'Ubuntu packages - curl',
url: 'https://packages.ubuntu.com/search?keywords=curl'
}
],
commands: [
{
title: 'Ubuntu/Debian',
code: 'sudo apt update && sudo apt install curl',
description: 'Instala curl no Ubuntu ou Debian.'
},
{
title: 'Arch/Manjaro',
code: 'sudo pacman -S curl',
description: 'Instala curl no Arch Linux ou Manjaro.'
},
{
title: 'Fedora/RHEL',
code: 'sudo dnf install curl',
description: 'Instala curl no Fedora ou RHEL.'
},
{
title: 'openSUSE',
code: 'sudo zypper install curl',
description: 'Instala curl no openSUSE.'
}
]
},
{
id: 'linux-ca-certificates-missing',
problem: 'Pacote ca-certificates não instalado',
os: 'linux',
description: 'Certificados CA são necessários para verificar conexões HTTPS seguras.',
links: [
{
title: 'Ubuntu packages - ca-certificates',
url: 'https://packages.ubuntu.com/search?keywords=ca-certificates'
},
{
title: 'Debian wiki - ca-certificates',
url: 'https://wiki.debian.org/ca-certificates'
}
],
commands: [
{
title: 'Ubuntu/Debian',
code: 'sudo apt update && sudo apt install ca-certificates',
description: 'Instala certificados CA no Ubuntu ou Debian.'
},
{
title: 'Arch/Manjaro',
code: 'sudo pacman -S ca-certificates',
description: 'Instala certificados CA no Arch Linux ou Manjaro.'
},
{
title: 'Fedora/RHEL',
code: 'sudo dnf install ca-certificates',
description: 'Instala certificados CA no Fedora ou RHEL.'
},
{
title: 'openSUSE',
code: 'sudo zypper install ca-certificates',
description: 'Instala certificados CA no openSUSE.'
}
]
},
{
id: 'linux-gnupg-missing',
problem: 'Pacote gnupg não instalado',
os: 'linux',
description: 'GnuPG é necessário para verificar chaves GPG durante a instalação do Docker.',
links: [
{
title: 'GnuPG oficial - Download',
url: 'https://gnupg.org/download/'
},
{
title: 'Ubuntu packages - gnupg',
url: 'https://packages.ubuntu.com/search?keywords=gnupg'
}
],
commands: [
{
title: 'Ubuntu/Debian',
code: 'sudo apt update && sudo apt install gnupg',
description: 'Instala GnuPG no Ubuntu ou Debian.'
},
{
title: 'Arch/Manjaro',
code: 'sudo pacman -S gnupg',
description: 'Instala GnuPG no Arch Linux ou Manjaro.'
},
{
title: 'Fedora/RHEL',
code: 'sudo dnf install gnupg',
description: 'Instala GnuPG no Fedora ou RHEL.'
},
{
title: 'openSUSE',
code: 'sudo zypper install gpg2',
description: 'Instala GnuPG no openSUSE.'
}
]
},
{
id: 'linux-sudo-missing',
problem: 'Privilégios sudo necessários',
os: 'linux',
description: 'Privilégios de administrador são necessários para instalar pacotes e configurar o sistema.',
links: [
{
title: 'Ubuntu - RootSudo',
url: 'https://help.ubuntu.com/community/RootSudo'
},
{
title: 'Arch Linux - Sudo',
url: 'https://wiki.archlinux.org/title/Sudo'
}
],
commands: [
{
title: 'Adicionar usuário ao grupo sudo (Ubuntu/Debian)',
code: 'sudo usermod -aG sudo $USER',
description: 'Adiciona o usuário atual ao grupo sudo. Faça logout e login novamente para aplicar.'
},
{
title: 'Adicionar ao grupo wheel (Arch/Fedora)',
code: 'sudo usermod -aG wheel $USER',
description: 'Adiciona o usuário atual ao grupo wheel. Faça logout e login novamente para aplicar.'
}
]
},
{
id: 'linux-ram-insufficient',
problem: 'RAM insuficiente',
os: 'linux',
description: 'Sistema requer no mínimo 2GB de RAM para executar Docker.',
commands: [
{
title: 'Verificar processos consumindo mais memória',
code: 'top',
description: 'Mostra processos em tempo real. Pressione "q" para sair.'
},
{
title: 'Verificar processos (htop - se instalado)',
code: 'htop',
description: 'Interface mais amigável. Instale com: sudo apt install htop (Ubuntu/Debian)'
},
{
title: 'Verificar uso de memória',
code: 'free -h',
description: 'Mostra uso de memória em formato legível.'
}
]
},
{
id: 'linux-disk-insufficient',
problem: 'Espaço em disco insuficiente',
os: 'linux',
description: 'É necessário pelo menos 10GB de espaço livre em disco.',
commands: [
{
title: 'Verificar espaço em disco',
code: 'df -h',
description: 'Mostra espaço usado e disponível em todos os sistemas de arquivos.'
},
{
title: 'Verificar diretórios ocupando mais espaço',
code: 'du -h --max-depth=1 / | sort -hr | head -10',
description: 'Lista os 10 diretórios que mais ocupam espaço (execute com sudo para resultados completos).'
},
{
title: 'Limpar cache de pacotes (Ubuntu/Debian)',
code: 'sudo apt clean && sudo apt autoremove',
description: 'Remove pacotes antigos e cache para liberar espaço.'
}
]
},
{
id: 'linux-cpu-cores',
problem: 'CPU cores insuficientes',
os: 'linux',
description: 'Recomenda-se pelo menos 2 cores de CPU para melhor desempenho.',
commands: [
{
title: 'Verificar número de cores',
code: 'nproc',
description: 'Mostra o número de processadores disponíveis.'
},
{
title: 'Informações detalhadas da CPU',
code: 'lscpu | grep "^CPU(s):"',
description: 'Mostra informações detalhadas sobre a CPU.'
}
]
},
// ========== macOS ==========
{
id: 'macos-version-old',
problem: 'macOS',
os: 'macos',
description: 'Versão do macOS muito antiga. Recomenda-se macOS 11 (Big Sur) ou superior.',
links: [
{
title: 'Apple - Atualizar macOS',
url: 'https://support.apple.com/HT201541'
},
{
title: 'Apple - Como atualizar',
url: 'https://support.apple.com/guide/mac-help/update-macos-mchlpx1065'
}
]
},
{
id: 'macos-homebrew-missing',
problem: 'Homebrew não instalado',
os: 'macos',
description: 'Homebrew é recomendado para facilitar a instalação do Docker no macOS.',
links: [
{
title: 'Homebrew oficial',
url: 'https://brew.sh/'
}
],
commands: [
{
title: 'Instalar Homebrew (Intel e Apple Silicon)',
code: '/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"',
description: 'Instala Homebrew. Siga as instruções na tela.'
},
{
title: 'Configurar PATH para Apple Silicon (após instalação)',
code: `echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"`,
description: 'Adiciona Homebrew ao PATH em Macs com Apple Silicon (M1/M2/M3).'
}
]
},
{
id: 'macos-rosetta-missing',
problem: 'Rosetta 2 não instalado',
os: 'macos',
description: 'Rosetta 2 é necessário para executar aplicativos x86_64 em Macs com Apple Silicon.',
links: [
{
title: 'Apple - Rosetta 2',
url: 'https://support.apple.com/HT211861'
},
{
title: 'Apple Developer - Rosetta',
url: 'https://developer.apple.com/documentation/apple-silicon/about-the-rosetta-translation-environment'
}
],
commands: [
{
title: 'Instalar Rosetta 2',
code: 'softwareupdate --install-rosetta --agree-to-license',
description: 'Instala Rosetta 2. Pode solicitar confirmação.'
},
{
title: 'Verificar se Rosetta está instalado',
code: 'ls /Library/Apple/usr/share/rosetta',
description: 'Verifica se Rosetta 2 está instalado. Se o diretório existir, está instalado.'
},
{
title: 'Testar execução x86_64',
code: 'arch -x86_64 uname -m',
description: 'Deve retornar "x86_64" se Rosetta estiver funcionando.'
}
]
},
{
id: 'macos-ram-insufficient',
problem: 'RAM insuficiente',
os: 'macos',
description: 'Sistema requer no mínimo 4GB de RAM para executar Docker no macOS.',
links: [
{
title: 'Apple - Memória Mac',
url: 'https://support.apple.com/mac/memory'
}
],
commands: [
{
title: 'Verificar processos consumindo mais memória',
code: 'top -o MEM',
description: 'Mostra processos ordenados por uso de memória. Pressione "q" para sair.'
},
{
title: 'Abrir Monitor de Atividade',
code: 'open -a "Activity Monitor"',
description: 'Abre o Monitor de Atividade do macOS.'
}
]
},
{
id: 'macos-disk-insufficient',
problem: 'Espaço em disco insuficiente',
os: 'macos',
description: 'É necessário pelo menos 4GB de espaço livre em disco.',
links: [
{
title: 'Apple - Liberar espaço de armazenamento',
url: 'https://support.apple.com/guide/mac-help/free-up-storage-space-mh31934'
}
],
commands: [
{
title: 'Abrir Gerenciamento de Armazenamento',
code: 'open "x-apple.systempreferences:com.apple.preference.storage"',
description: 'Abre as preferências de armazenamento do macOS.'
}
]
},
{
id: 'macos-cpu-cores',
problem: 'CPU cores insuficientes',
os: 'macos',
description: 'Recomenda-se pelo menos 2 cores de CPU para melhor desempenho.',
commands: [
{
title: 'Verificar número de cores',
code: 'sysctl -n hw.ncpu',
description: 'Mostra o número de cores de CPU disponíveis.'
}
]
},
// ========== GERAL ==========
{
id: 'os-not-supported',
problem: 'Sistema operacional não suportado',
os: 'all',
description: 'Este sistema operacional não é suportado. Docker requer Windows, Linux ou macOS.',
links: [
{
title: 'Docker - Requisitos do Sistema',
url: 'https://docs.docker.com/desktop/supported-platforms/'
}
]
}
];
/**
* Encontra a solução correspondente para um problema
* @param problemText Texto do problema retornado pela verificação
* @param os Sistema operacional atual
* @returns Solução correspondente ou null se não encontrada
*/
export function findProblemSolution(problemText: string, os: string): ProblemSolution | null {
const normalizedProblem = problemText.toLowerCase();
const normalizedOs = os.toLowerCase();
// Buscar por matching exato primeiro
let solution = PROBLEM_SOLUTIONS.find(s => {
const matchesOs = s.os === 'all' || s.os === normalizedOs ||
(normalizedOs === 'mac' && s.os === 'macos') ||
(normalizedOs === 'windows' && s.os === 'windows') ||
(normalizedOs === 'linux' && s.os === 'linux');
if (!matchesOs) return false;
const problemLower = s.problem.toLowerCase();
return normalizedProblem.includes(problemLower) || problemLower.includes(normalizedProblem);
});
// Se não encontrou, tentar matching parcial por palavras-chave
if (!solution) {
const keywords: { [key: string]: string } = {
'windows build': 'windows-build-old',
'virtualmachineplatform': 'windows-vm-platform',
'wsl não habilitado': 'windows-wsl-not-enabled',
'wsl 2 não configurado': 'windows-wsl2-not-configured',
'ram insuficiente': normalizedOs === 'windows' ? 'windows-ram-insufficient' :
normalizedOs === 'mac' || normalizedOs === 'macos' ? 'macos-ram-insufficient' :
'linux-ram-insufficient',
'espaço em disco': normalizedOs === 'windows' ? 'windows-disk-insufficient' :
normalizedOs === 'mac' || normalizedOs === 'macos' ? 'macos-disk-insufficient' :
'linux-disk-insufficient',
'cpu cores': normalizedOs === 'windows' ? 'windows-cpu-cores' :
normalizedOs === 'mac' || normalizedOs === 'macos' ? 'macos-cpu-cores' :
'linux-cpu-cores',
'kernel': 'linux-kernel-old',
'pacote curl': 'linux-curl-missing',
'pacote ca-certificates': 'linux-ca-certificates-missing',
'pacote gnupg': 'linux-gnupg-missing',
'privilégios sudo': 'linux-sudo-missing',
'homebrew': 'macos-homebrew-missing',
'rosetta': 'macos-rosetta-missing',
'sistema operacional não suportado': 'os-not-supported'
};
for (const [keyword, id] of Object.entries(keywords)) {
if (normalizedProblem.includes(keyword)) {
solution = PROBLEM_SOLUTIONS.find(s => s.id === id);
if (solution) break;
}
}
}
return solution || null;
}