n8n/Artigo

    n8n não inicia: erros comuns e soluções

    Se o n8n não inicia depois de um restart, na maioria dos casos o container do PostgreSQL sobe antes do n8n estar pronto — ajuste o depends_on para usar condition: service_healthy. Outros candidatos comuns são a porta 5678 ocupada por outro processo, uma variável de ambiente ausente ou o volume com permissão incorreta.

    Diagnóstico rápido: veja os logs primeiro

    Antes de tentar qualquer correção, verifique o que o container está reportando. Os logs revelam a causa em quase todos os casos:

    bash
    # Últimas 50 linhas de log do container n8n
    docker compose logs n8n --tail=50
    
    # Status de todos os containers do stack
    docker compose ps
    Dica
    Procure por mensagens como ECONNREFUSED, address already in use ou permission denied — cada uma aponta para uma causa diferente listada abaixo.

    Causa 1: PostgreSQL sobe depois do n8n (o mais comum)

    O n8n tenta se conectar ao banco logo ao iniciar. Se o PostgreSQL ainda não terminou o startup, o n8n recebe ECONNREFUSED e encerra. A solução é usar depends_on com condition: service_healthy, que força o Docker a aguardar o healthcheck do postgres passar antes de iniciar o n8n:

    yaml
    services:
      postgres:
        image: postgres:16-alpine
        environment:
          POSTGRES_DB: n8n
          POSTGRES_USER: n8n
          POSTGRES_PASSWORD: sua_senha
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U n8n"]
          interval: 5s
          timeout: 5s
          retries: 5
        volumes:
          - postgres_data:/var/lib/postgresql/data
    
      n8n:
        image: n8nio/n8n:latest
        restart: always
        ports:
          - "5678:5678"
        depends_on:
          postgres:
            condition: service_healthy   # aguarda o healthcheck passar
        environment:
          - DB_TYPE=postgresdb
          - DB_POSTGRESDB_HOST=postgres
          - DB_POSTGRESDB_DATABASE=n8n
          - DB_POSTGRESDB_USER=n8n
          - DB_POSTGRESDB_PASSWORD=sua_senha
    
    volumes:
      postgres_data:
    Dica
    condition: service_healthy só funciona se o serviço postgres tiver um healthcheck definido. Sem healthcheck, o Docker não sabe se o banco está pronto para aceitar conexões.

    Causa 2: porta 5678 já está em uso

    Se outro processo já ocupa a porta 5678, o n8n falha ao tentar fazer bind. O log mostrará address already in use ou EADDRINUSE.

    bash
    # Verificar qual processo está usando a porta 5678
    ss -tlnp | grep 5678
    
    # Alternativa com lsof
    lsof -i :5678
    Atenção
    Para resolver: encerre o processo que ocupa a porta ou mapeie o n8n para outra porta no docker-compose.yml (ex.: "5679:5678"). Reinicie com docker compose up -d após a alteração.

    Causa 3: variável de ambiente ausente ou inválida

    Variáveis incorretas são silenciosas — o n8n tenta iniciar, não consegue conectar ao banco e encerra sem mensagem clara. Inspecione a configuração resolvida antes de subir:

    bash
    # Mostrar a configuração final com variáveis expandidas
    docker compose config
    Atenção
    Erro clássico: DB_POSTGRESDB_HOST=localhost em vez do nome do serviço Docker (ex.: postgres). Dentro de uma rede Docker, containers se comunicam pelo nome do serviço, não por localhost.

    Causa 4: permissão incorreta no volume

    O n8n roda internamente como UID 1000. Se o diretório de bind mount pertence a root, o processo não consegue gravar e para na inicialização.

    bash
    # Corrigir permissões no diretório local (bind mount)
    chown -R 1000:1000 ./n8n_data
    
    # Se usar volume nomeado, recrie o container
    docker compose down
    docker compose up -d
    Dica
    Se você usa volume nomeado (n8n_data:) em vez de bind mount (./n8n_data:), o Docker gerencia as permissões automaticamente e este erro raramente acontece.

    Causa 5: memória insuficiente

    O n8n precisa de pelo menos 512 MB de RAM livre para iniciar. Com workflows ativos, use 1 GB ou mais. Verifique o consumo atual:

    bash
    # Memória disponível no sistema
    free -h
    
    # Consumo por container
    docker stats --no-stream

    Como reiniciar o n8n com segurança

    Após corrigir a causa raiz, use o comando adequado para reiniciar sem impactar o banco:

    bash
    # Reiniciar apenas o n8n (mantém postgres e Redis rodando)
    docker compose restart n8n
    
    # Reiniciar tudo — necessário após editar o docker-compose.yml
    docker compose down
    docker compose up -d
    
    # Confirmar que o container está saudável
    docker compose ps
    Dica
    docker compose restart n8n é mais rápido e mantém o banco ativo. Use down && up quando alterar variáveis de ambiente ou a estrutura do arquivo compose.

    $ runstack deploy --plan starter

    Não quer configurar manualmente?

    Não quer configurar manualmente? Implante o n8n em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.

    Perguntas frequentes