Avatar de DK
DKTrabalha com Linux e Unix a mais de 23 anos e possui as certificações LPI 3, RHCE, AIX e VIO.

30 nov, 2025
5 min de leitura

Podman + MariaDB: Resolvendo “Error establishing a database connection” após reiniciar o servidor

Avatar de DK
DKTrabalha com Linux e Unix a mais de 23 anos e possui as certificações LPI 3, RHCE, AIX e VIO.

30 nov, 2025
5 min de leitura
,

Você reiniciou seu servidor Linux e seu site WordPress simplesmente parou de funcionar? Aquela mensagem frustrante “Error establishing a database connection” apareceu do nada, mesmo com o MariaDB rodando normalmente?

Pois é… passei por isso recentemente e a solução não foi óbvia a princípio, mas depois de descobrir foi “num pode ser que era isso”. Se você usa Podman para rodar seus containers, esse post pode te salvar algumas horas de debugging.

O Cenário

Tenho um servidor Fedora 43 rodando:

  • WordPress em um container Podman
  • MariaDB instalado diretamente no host (fora do container)
  • O container conecta ao banco via host.docker.internal
  • Tudo funcionava perfeitamente… até eu reiniciar o servidor.

O Problema

Após o reboot, o site começou a mostrar apenas:

Error establishing a database connection

Primeira coisa que verifiquei: o MariaDB está rodando?

sudo systemctl status mariadb
? mariadb.service - MariaDB 10.11 database server
     Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; preset: disabled)
     Active: active (running) since Sun 2025-11-30 04:49:10 UTC; 12min ago
     Status: "Taking your SQL requests now..."

Rodando normalmente. Então o problema não era o banco.

Investigando o Container

Verifiquei o status do container:

podman ps -a --format <span class="hljs-string">'table {{.Names}}\t{{.Status}}\t{{.Ports}}'</span>
NAMES             STATUS                     PORTS
fogonacaixadagua  Up 17 minutes (unhealthy)  127.0.0.1:3008->80/tcp, 9000/tcp

Unhealthy. O healthcheck do container estava falhando. Os logs confirmaram o problema:

podman logs fogonacaixadagua --<span class="hljs-built_in">tail</span> 10
127.0.0.1 -  30/Nov/2025:05:06:03 +0000 "GET /index.php" 500
127.0.0.1 -  30/Nov/2025:05:06:15 +0000 "GET /index.php" 500

Todas as requisições retornando erro 500. O container com o WordPress estava no bueno.

Verificando a Configuração

No wp-config.php, a configuração de conexão estava correta:

<span class="hljs-title function_ invoke__">define</span>(<span class="hljs-string">'DB_HOST'</span>, <span class="hljs-string">'host.docker.internal'</span>);

E no docker-compose.yml (usado com podman-compose):

<span class="hljs-attr">services:</span>
  <span class="hljs-attr">wordpress:</span>
    <span class="hljs-attr">extra_hosts:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">"host.docker.internal:host-gateway"</span>

O hostname estava resolvendo corretamente dentro do container:

podman <span class="hljs-built_in">exec</span> fogonacaixadagua getent hosts host.docker.internal
10.89.0.1         host.docker.internal  host.docker.internal

O MariaDB estava escutando em todas as interfaces:

sudo ss -tlnp | grep 3306
LISTEN 0      80      0.0.0.0:3306       0.0.0.0:*    users:(("mariadbd",pid=1093,fd=23))

Então por que não conectava?

O Teste Decisivo

Tentei conectar na porta 3306 de dentro do container:

podman <span class="hljs-built_in">exec</span> fogonacaixadagua nc -zv host.docker.internal 3306
nc: host.docker.internal (10.89.0.1:3306): Host is unreachable

Host is unreachable. O container não conseguia alcançar o host na porta do banco. Isso cheirava a firewall.

A Causa Raiz: Firewalld

Verifiquei as zonas do firewall:

sudo firewall-cmd --list-all
FedoraServer (default, active)
  interfaces: eth0
  services: dhcpv6-client http https ssh
  ...

Percebeu o problema? A interface eth0 está na zona, mas e a interface do Podman?

ip addr show | grep -E <span class="hljs-string">'podman|10.89'</span>
4: podman1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
    inet 10.89.0.1/24 brd 10.89.0.255 scope global podman1

A interface podman1 existe com o IP 10.89.0.1, mas não estava associada a nenhuma zona do firewall. Por padrão, o firewalld bloqueia tráfego de interfaces não associadas.

A Solução

Adicionar a interface podman1 à zona trusted (que permite todo o tráfego):

sudo firewall-cmd --zone=trusted --add-interface=podman1 --permanent
sudo firewall-cmd --reload
success
success

O parâmetro --permanent é essencial aqui. Sem ele, a regra seria perdida no próximo reboot e voltaríamos à estaca zero.

Verificando a Correção

Testei a conectividade novamente:

podman <span class="hljs-built_in">exec</span> fogonacaixadagua nc -zv host.docker.internal 3306
host.docker.internal (10.89.0.1:3306) open

E o site:

curl -sL -o /dev/null -w <span class="hljs-string">'%{http_code}'</span> https://fogonacaixadagua.com.br/
200

Funcionando!

Por Que Isso Acontece?

Quando o servidor reinicia, o firewalld carrega suas configurações antes do Podman criar suas interfaces de rede. Interfaces virtuais como podman1 são criadas dinamicamente pelo Podman, e o firewalld não as associa automaticamente a nenhuma zona.

Sem estar em uma zona permissiva, todo o tráfego originado do container para o host é bloqueado – incluindo a conexão com o MariaDB.

Alternativas à Zona Trusted

Se você não quer colocar a interface na zona trusted (que permite todo o tráfego), pode criar uma zona específica ou adicionar regras mais granulares:

<span class="hljs-comment"># Criar zona específica para containers</span>
sudo firewall-cmd --permanent --new-zone=containers
sudo firewall-cmd --permanent --zone=containers --add-service=mysql
sudo firewall-cmd --permanent --zone=containers --add-interface=podman1
sudo firewall-cmd --reload

Ou adicionar apenas a porta necessária na zona padrão:

sudo firewall-cmd --permanent --zone=FedoraServer --add-rich-rule=<span class="hljs-string">'rule family="ipv4" source address="10.89.0.0/24" port port="3306" protocol="tcp" accept'</span>
sudo firewall-cmd --reload

Resumo

Sintoma

“Error establishing a database connection” após reboot

Causa

Interface podman1 não associada a zona do firewall

Solução

firewall-cmd --zone=trusted --add-interface=podman1 --permanent

Comandos Úteis para Diagnóstico

<span class="hljs-comment"># Verificar status do container</span>
sudo podman ps -a

<span class="hljs-comment"># Ver logs do container</span>
sudo podman logs <container_name> --<span class="hljs-built_in">tail</span> 50

<span class="hljs-comment"># Testar resolução de hostname dentro do container</span>
sudo podman <span class="hljs-built_in">exec</span> <container_name> getent hosts host.docker.internal

<span class="hljs-comment"># Testar conectividade de porta</span>
sudo podman <span class="hljs-built_in">exec</span> <container_name> nc -zv host.docker.internal 3306

<span class="hljs-comment"># Listar zonas e interfaces do firewall</span>
sudo firewall-cmd --get-active-zones

<span class="hljs-comment"># Ver configuração completa de uma zona</span>
sudo firewall-cmd --zone=<zone_name> --list-all

Espero que esse post te ajude a resolver esse problema rapidamente. É uma daquelas situações onde tudo parece estar funcionando, mas um detalhe de configuração de rede acaba quebrando tudo.

Se você passou por algo parecido ou tem dúvidas, deixa um comentário!

Avatar de DK

Comentários

Deixe um comentário

Seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Ir para