Instalei o n8n e deu erro: como resolver os problemas mais comuns da instalação

erros mais comuns ao instalar o n8n e como corrigir cada um
Resposta rápida

Erro ao instalar n8n quase sempre cai em quatro famílias: porta 5678 ocupada no host, permissão negada no volume (o famoso EACCES: permission denied, open ‘/home/node/.n8n/config’), contêiner que morre com exit code 137 e webhook que não responde. Cada um tem sintoma próprio e correção própria: republicar a porta (-p 5679:5678), usar o volume nomeado n8n_data montado em /home/node/.n8n, checar a flag OOMKilled no docker inspect e entender a diferença entre URL de teste e URL de produção. Tem ainda o tutorial antigo que quebrou na linha 2.x, com –tunnel e N8N_CONFIG_FILES removidos

Fala aí, beleza? O contêiner subiu, o Docker mostra tudo verdinho, você abre o navegador e… nada 😅

Se tem uma coisa que aprendi vendo gente instalar n8n é que o erro ao instalar n8n quase nunca é criativo

Ele repete quatro motivos: porta ocupada, permissão negada no volume, contêiner que morre sozinho e webhook que não abre

A boa notícia: cada um desses tem sintoma próprio, causa conhecida e correção específica

O problema é que a maioria dos tutoriais assume que deu tudo certo no primeiro run, e quando não dá, você fica olhando pro log sem saber qual pedaço importa

Então bora destrinchar um por um, do sintoma até a correção

Sintoma Causa provável Correção
Contêiner roda, http://localhost:5678 não abre Porta 5678 já em uso no host Publicar em outra porta do host (-p 5679:5678)
EACCES: permission denied no log Pasta do host sem escrita pro UID 1000 Usar o volume nomeado n8n_data
Contêiner sobe e cai com código 137 SIGKILL, tipicamente OOM Conferir a flag OOMKilled e liberar memória
Serviço externo chama e nada acontece URL de teste no lugar da de produção Publicar o workflow e usar a Production URL
Formação Agentes de IA
Formação Recomendada

Formação Agentes de IA

Domine a criação de Agentes de IA e Venda para Empresas

  • 402 aulas
  • 32 projetos
  • 38h 19min

Erro de porta ocupada: o n8n sobe mas o localhost:5678 não abre

Esse é o clássico

O Docker lista o contêiner como rodando, mas http://localhost:5678 não responde

Ou pior: o próprio docker run já falha na hora de publicar a porta

Por que isso acontece:

O n8n roda por padrão na porta 5678, definida pela variável N8N_PORT

Se outra aplicação já ocupa a 5678 na sua máquina (e sim, isso é MUITO comum quando você tem vários contêineres de projetos diferentes), o par porta e host já está tomado

A porta é única por aplicação, não tem como duas coisas escutarem o mesmo lugar

A correção:

A sacada é que a porta de DENTRO do contêiner não precisa mudar

O n8n continua feliz escutando a 5678 lá dentro, você só troca a porta do host que aponta pra ela

docker volume create n8n_data

docker run -it --rm \
  --name n8n \
  -p 5679:5678 \
  -e GENERIC_TIMEZONE="<SEU_FUSO>" \
  -e TZ="<SEU_FUSO>" \
  -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
  -v n8n_data:/home/node/.n8n \
  docker.n8n.io/n8nio/n8n

No docker-compose.yml a ideia é a mesma, muda só a sintaxe:

ports:
  - "5679:5678"

Aí o acesso passa a ser http://localhost:5679

Tome cuidado! Depois de remapear, muita gente continua tentando abrir a 5678 e jura que a instalação quebrou de novo 😛

Pra prevenir: decide a porta do host ANTES de subir o contêiner, e anota

EACCES permission denied: o erro de permissão do Docker no n8n

O sintoma aqui é bem literal, a mensagem aparece assim no log:

EACCES: permission denied, open '/home/node/.n8n/config'

Quando bate esse erro, o contêiner nem chega a servir a interface

Por que isso acontece:

A imagem oficial do n8n roda com o usuário node, de UID 1000

Quando você aponta um bind mount pra uma pasta do host que pertence ao root, o processo de dentro do contêiner (que NÃO é root) simplesmente não consegue escrever ali

E o n8n precisa escrever nessa pasta logo de cara, porque é onde ele guarda credenciais, workflows e execuções passadas

E olha, não é caso isolado nem culpa sua: o mesmo erro aparece nas issues #1240 e #11102 do repositório oficial n8n-io/n8n

É o tipo de tropeço que também pega gente instalando outras ferramentas de terminal, tipo o erro ao instalar o Claude Code, onde permissão e caminho de instalação são metade dos casos

A correção:

O caminho mais seguro é não improvisar bind mount pra pasta de dados

Usa volume nomeado, exatamente como está no comando oficial: docker volume create n8n_data e depois monta em /home/node/.n8n

O Docker cuida da permissão pra você e o assunto morre ali

Se você faz questão de apontar pra uma pasta do host (pra fazer backup na mão, por exemplo), então a pasta precisa dar escrita pro UID 1000, senão o erro volta no próximo run

E a variável de permissão do arquivo de settings?

Existe a N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS, booleana, padrão false

Quando ligada em true, ela tenta aplicar permissão 0600 no arquivo de settings, ou seja, leitura e escrita só pro dono

Se liga que são duas coisas separadas: essa variável você liga ou não, e a linha 2.0 trouxe uma mudança própria, os arquivos de configuração passaram a exigir permissão 0600 por padrão

Não é a variável que ativa essa exigência, ela continua vindo desligada, e o comando oficial de instalação já traz ela em true

Ou seja, instalação que era tolerante antes pode reclamar agora

Container do n8n reiniciando sozinho: o que significa o exit code 137

Aqui o sintoma é chato de debugar porque parece intermitente: o contêiner sobe, funciona por um tempinho (ou nem isso) e cai, em loop

E no status aparece o código de saída 137

O que é o 137?

Esse número não é aleatório

O exit code 137 significa que o processo recebeu SIGKILL (sinal 9), tipicamente do OOM killer do kernel Linux por falta de memória

Traduzindo: ninguém derrubou o n8n por bug, o sistema matou o processo porque a memória acabou

Como confirmar:

Dá pra tirar a dúvida na inspeção do contêiner

docker inspect n8n

Na saída, procura a flag OOMKilled

Se ela estiver verdadeira, é falta de memória mesmo, e adiantar pouco ficar mexendo em variável de ambiente: o que precisa é liberar memória pro contêiner

A parte boa dessa história:

Seus dados não vão embora nesse restart

Por padrão o n8n usa SQLite e guarda credenciais, execuções passadas e workflows no diretório .n8n do contêiner, que no comando oficial está montado no volume /home/node/.n8n

Enquanto o volume existe, o contêiner pode morrer e voltar que os workflows continuam lá

Agora, se o contêiner sobe normalmente e o erro aparece só depois, dentro da interface, aí a investigação é outra: vale olhar como corrigir erro 500 no n8n, que é sintoma de aplicação de pé, não de instalação quebrada

Webhook do n8n não abre: URL de teste, URL de produção e proxy reverso

Esse é o erro que mais gera cabelo branco, porque o n8n está rodando, a interface abre, o workflow existe… e o serviço externo chama a URL e nada acontece

Ou então o n8n avisa que aquele webhook já está em uso

São três causas diferentes, cada uma com correção própria

Causa 1: você está usando a URL de teste

O n8n gera DUAS URLs para cada nó Webhook

A Test URL serve pra construir e depurar, ela mostra os dados na tela

A Production URL é a de uso real, e ela não exibe os dados no workflow

O detalhe que pega todo mundo: o webhook de teste fica ativo por 120 segundos depois de acionado

Ou seja, você aciona o Listen for test event, vai configurar o serviço externo com calma, volta e a janela já fechou 😅

O registro também é diferente: o de teste é registrado quando você seleciona Listen for test event ou executa o workflow, e o de produção é registrado quando você publica o workflow

Então a regra de ouro é: publica o workflow ANTES de entregar a URL pro serviço externo

Causa 2: path e método já ocupados

O n8n permite registrar apenas um webhook por combinação de caminho e método HTTP

Ou seja, dois workflows disputando o mesmo GET /my-request não rola, e o n8n avisa que o par já está em uso

A correção é despublicar o workflow que está segurando aquela combinação, ou trocar o caminho do novo

Causa 3: proxy reverso na frente do n8n

Quando o n8n roda atrás de proxy reverso, ele não adivinha sozinho qual é o endereço público

Resultado: ele exibe e registra uma URL que o mundo lá fora não alcança

Pra resolver, a URL do webhook precisa ser definida manualmente, e ela define a base tanto do webhook de teste quanto do de produção

O nome atual da variável é N8N_WEBHOOK_URL

Se você viu WEBHOOK_URL em algum tutorial, ela virou apelido descontinuado: ainda funciona, mas emite aviso de descontinuação na inicialização

Além disso, é preciso informar quantos proxies existem na frente do n8n com a N8N_PROXY_HOPS, sendo 1 para um proxy reverso

E vale ficar de olho na N8N_SECURE_COOKIE, booleana, padrão true: com ela ligada, o cookie de sessão só trafega por HTTPS

Instalei pelo tutorial antigo e quebrou: o que mudou no n8n 2.0

Esse aqui é sorrateiro: o comando não dá erro de digitação, ele só… não existe mais

A linha vigente é a 2.x (a série 2.34 saiu em agosto de 2026), e ela trouxe mudanças que aposentaram receita de tutorial antigo

As principais:

  1. --tunnel foi removido na 2.0. Aquela opção de linha de comando pra expor o n8n rapidinho não está mais lá, e a própria documentação manda migrar pra outra solução de túnel, citando ngrok, localtunnel e Cloudflare Tunnel. O erro comum aqui é copiar o comando de um vídeo antigo e achar que o Docker é que está bugado
  2. N8N_CONFIG_FILES foi removida na 2.0. A configuração agora migra para variáveis de ambiente, arquivo .env ou configuração baseada em _FILE. Quem tinha arquivo de config apontado por essa variável simplesmente vê a config ser ignorada
  3. N8N_RUNNERS_ENABLED está descontinuada da 2.0 em diante. Na 1.x ela era necessária em true pra ligar os task runners, agora não precisa mais ser definida, porque na 2.0 os task runners vêm ligados por padrão e as execuções do nó Code rodam em ambiente isolado
  4. N8N_BLOCK_ENV_ACCESS_IN_NODE passou a valer true por padrão. Traduzindo: o acesso a variáveis de ambiente a partir do nó Code está bloqueado por padrão na 2.0. Se um workflow antigo lia env var dentro do Code, ele quebra e o erro nem parece de instalação

A prevenção aqui é simples e vale pra qualquer ferramenta: confere a linha de versão antes de sair copiando comando de tutorial

O que eu vi instalando o n8n com Docker na prática

No vídeo abaixo eu faço a instalação local do n8n com Docker Desktop, que é o caminho mais simples que existe: fora o Docker, você não instala mais nada na máquina

E aí aparecem uns detalhes que só aparecem na tela mesmo

O primeiro é a escolha da imagem

Quando pesquisei dentro do Docker Desktop, vieram vários resultados parecidos, incluindo um de MCP que não tem nada a ver

Tem que ser criterioso pra não baixar a imagem errada e passar meia hora debugando algo que nem é n8n

A imagem que apareceu ali tinha 1 GB de tamanho

O segundo ponto é o volume

Eu criei uma pasta na máquina pra servir de volume antes de subir o contêiner, e o motivo é bem prático: sem volume, você desliga e liga o PC e os dados se foram

E cada imagem exige um caminho específico dentro do contêiner pra gravar os arquivos, então esse caminho tem que ser conferido na documentação da imagem, não chutado

O terceiro é o nome do contêiner

Nomear na mão parece frescura, até você ter cinco contêineres e o Docker ter batizado o seu de um nome aleatório impossível de achar 😀

O quarto é a porta

Eu parti da porta padrão sugerida e já avisei ali: se você tiver outra aplicação Docker rodando na mesma porta, dá conflito, porque a porta é única por aplicação

Depois disso é rodar o run (a imagem baixada vem desligada, quem transforma imagem em contêiner é o run), olhar o log apontando o editor no localhost com a porta escolhida e abrir a interface no navegador

Duas observações que ficaram do processo

A versão instalada não é você que escolhe: a imagem oficial traz a versão estável do momento

E o Docker pode falhar ou simplesmente não abrir quando o PC é ligado de novo

Inclusive, durante a gravação, um dos meus contêineres tinha subido sozinho, sem eu mandar

Ah, e a tela inicial oferece um cadastro por e-mail que libera recursos pagos

Eu pulei porque era uma instalação descartável, mas se a sua vai ficar de pé por muito tempo, vale preencher

No vídeo você vê o ciclo inteiro: busca da imagem, criação do volume, configuração de nome e porta, o run e a primeira tela do n8n no navegador

Próximo passo depois de destravar a instalação

Esses quatro erros (porta, permissão, contêiner morrendo e webhook) cobrem a maior parte dos casos de instalação travada

E o diagnóstico começa sempre no mesmo lugar: o log do contêiner

É ele que diz se você está diante de um EACCES, de um 137 ou de um serviço que nem chegou a subir

O caminho de volta pro trilho é subir de novo com o comando oficial: volume n8n_data montado em /home/node/.n8n, imagem docker.n8n.io/n8nio/n8n e a porta publicada que você escolheu

Abre http://localhost:5678 (ou a porta que você remapeou), confirma que a interface carrega, e SÓ DEPOIS publica o primeiro workflow com webhook

Nessa ordem, quando algo der errado, você sabe exatamente qual peça olhar 😉

até o próximo post!

Perguntas frequentes

Preciso usar –tunnel para acessar o n8n instalado localmente?

Não, essa opção de linha de comando foi removida na versão 2.0, e o n8n já está na linha 2.x atual. A própria documentação orienta migrar para outra solução de túnel, como ngrok, localtunnel ou Cloudflare Tunnel.

É obrigatório definir N8N_RUNNERS_ENABLED ao instalar o n8n?

Depende da versão. Na 1.x essa variável é obrigatória em true pra ligar os task runners, mas a partir da 2.0 ela está descontinuada e nem precisa mais ser definida, porque os task runners já vêm habilitados por padrão.

Perco os workflows se o contêiner do n8n reiniciar ou cair sozinho?

Não, enquanto o volume de dados existir. O n8n usa SQLite por padrão e guarda credenciais, execuções e workflows no diretório .n8n, que no comando oficial fica montado no volume n8n_data em /home/node/.n8n.

O que significa o aviso de que o webhook já está em uso durante o teste?

O n8n permite registrar só um webhook por combinação de caminho e método HTTP, como GET /my-request. Se outro workflow já ocupa esse par, a solução é despublicar o workflow que está com o webhook conflitante.

Preciso configurar alguma variável de webhook se instalar o n8n atrás de um proxy reverso?

Sim, é preciso definir manualmente a URL do webhook pela variável N8N_WEBHOOK_URL, que define a base tanto do webhook de teste quanto do de produção (o antigo nome WEBHOOK_URL ainda funciona, mas emite aviso de descontinuação). Também é necessário informar N8N_PROXY_HOPS, com valor 1 para um único proxy na frente do n8n.

Quanto espaço em disco a instalação do n8n pelo Docker ocupa?

No Docker Desktop, a imagem oficial do n8n aparece com 1 GB de tamanho. Vale considerar esse espaço antes de instalar em máquina com disco apertado, já que ele fica separado do volume de dados n8n_data.




Subscribe
Notify of
guest

0 Comentários
Oldest
Newest Most Voted

Formações

Formação Vibe Coding

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 474 aulas
  • 20 projetos
  • 39h 27min

Blog | Mais populares