Porta em Uso (EADDRINUSE) — Solução

Como resolver erro EADDRINUSE quando a porta já está sendo usada. Liberar porta ocupada.

Porta em Uso (EADDRINUSE)

Descrição do Problema

Ao iniciar o gateway, você recebe erro indicando que a porta já está em uso:

Error: listen EADDRINUSE: address already in use :::3000
Error: Port 3000 is already in use
bind: Address already in use
Possíveis Causas
  1. Instância anterior rodando - Gateway não foi parado corretamente
  2. Outro serviço na porta - Nginx, Apache, outro app
  3. Processo zumbi - Processo travado ocupando a porta
  4. Container Docker - Container antigo ainda rodando
Soluções1. Identificar o Processo
# Ver qual processo está na porta 3000
lsof -i :3000

# Alternativa com netstat
netstat -tulpn | grep 3000

# Alternativa com ss
ss -tulpn | grep 3000
2. Matar o Processo
# Matar por PID (substitua pelo número real)
kill -9 <PID>

# Matar processos do openclaw
pkill -f openclaw

# Matar processo na porta específica
fuser -k 3000/tcp
3. Usar Outra Porta
# Iniciar em porta diferente
openclaw gateway start --port 3001

# Ou configurar no arquivo
# ~/.openclaw/config.yaml
gateway:
  port: 3001
4. Verificar Containers Docker
# Listar containers
docker ps -a | grep openclaw

# Parar container
docker stop <container_id>

# Remover container parado
docker rm <container_id>
5. Parar Outros Serviços
# Parar Nginx
sudo systemctl stop nginx

# Parar Apache
sudo systemctl stop apache2

# Verificar o que está rodando
sudo systemctl list-units --type=service --state=running
6. Limpar Processos Zumbis
# Encontrar processos zumbis
ps aux | grep -w Z

# Ver processos do node
ps aux | grep node

# Matar todos os processos node (cuidado!)
killall node
Script de Diagnóstico
#!/bin/bash
PORT=${1:-3000}

echo "Verificando porta $PORT..."

# Verificar se está em uso
if lsof -i :$PORT > /dev/null 2>&1; then
    echo "Porta $PORT está em uso!"
    echo ""
    echo "Processo:"
    lsof -i :$PORT
    echo ""
    read -p "Deseja matar o processo? (s/n) " -n 1 -r
    echo
    if [[ $REPLY =~ ^[Ss]$ ]]; then
        fuser -k $PORT/tcp
        echo "Processo finalizado!"
    fi
else
    echo "Porta $PORT está livre!"
fi
Problemas RelacionadosPrevenção
  • Sempre pare o gateway corretamente com openclaw gateway stop
  • Use portas diferentes para cada serviço
  • Configure healthchecks para detectar processos travados
  • Use process managers como PM2 ou systemd