Discourse de repente ficou inacessível novamente

Olá!

Minha instância do Discourse parou de funcionar (não foi feita nenhuma alteração do meu lado).

No production.log, apareceu esta mensagem:
Error connecting to Redis on localhost:6379 (Errno::ENETUNREACH) subscribe failed,

O que tentei até agora:

  • Reinicialização do servidor
  • Atualização do Docker + reinicialização do servidor + reconstrução do app

Sou bastante novo no Docker e no Discourse, então não vejo o que mais posso fazer :frowning:

SO do host: CentOS 7
Proxy: Apache
Docker: versão mais recente

No host, tenho o fail2ban e o firewalld instalados.
No log do firewalld, aparecem linhas estranhas:

2020-07-23 14:00:52 WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -X DOCKER-ISOLATION-STAGE-1' failed: iptables: No chain/target/match by that name.

2020-07-23 14:00:52 WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -F DOCKER-ISOLATION-STAGE-2' failed: iptables: No chain/target/match by that name.

2020-07-23 14:00:52 WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -X DOCKER-ISOLATION-STAGE-2' failed: iptables: No chain/target/match by that name.

2020-07-23 14:00:52 WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -F DOCKER-ISOLATION' failed: iptables: No chain/target/match by that name.

2020-07-23 14:00:52 WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -X DOCKER-ISOLATION' failed: iptables: No chain/target/match by that name.

2020-07-23 14:00:53 WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -D FORWARD -i docker0 -o docker0 -j DROP' failed: iptables: Bad rule (does a matching rule exist in that chain?).

2020-07-23 14:00:53 WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -D FORWARD -i docker0 -o docker0 -j DROP' failed: iptables: Bad rule (does a matching rule exist in that chain?).

Qualquer ajuda ou orientação seria muito apreciada :slight_smile:
Obrigado antecipadamente!

Parece ser algum problema com iptables e docker. Esses são os termos para pesquisar. Não é um problema do Discourse.

Eu diria que o problema com o Redis está mais ligado ao Discourse do que ao iptables ou ao Docker, não é?

Isso sugere para mim que a rede do Docker está quebrada, então, mesmo que o Discourse e o Redis estejam funcionando corretamente, o Discourse não consegue acessar o Redis porque a rede e/ou o Docker estão com problemas.

Minha suposição é que esses problemas surgiram algum tempo depois que você instalou o firewalld, e foi isso que quebrou sua instalação.

Obrigado, Jay.

Parei o daemon do firewalld, reiniciei o Docker e o container com defeito, mas o erro continua o mesmo (em production.log):

Erro ao conectar no Redis em localhost:6379 (Errno::ENETUNREACH) assinatura falhou, tentando reconectar em 1 segundo.

Conectei ao container do Docker:

docker exec --privileged -it <container id> bash

Consigo ver o Redis em execução:

redis 45 0.2 0.1 45936 4352 ? Sl 05:29 0:02 /usr/bin/redis-server *:6379

Alguma ideia?

Fiz alguns progressos. Minha configuração está usando o Apache 2.4 como proxy. Na minha configuração, adicionei o seguinte:

RemoteIPHeader X-Forwarded-For

Para rastrear o endereço IP original.
Após reiniciar o httpd, consegui acessar o Discourse (com um alerta sobre a expiração do certificado SSL). Corrigi isso também e agora tudo está funcionando bem, mas com o firewalld desativado.

Encontrei várias postagens sobre problemas entre Docker e firewalld no CentOS 7. Vou voltar a usar o iptables.

Sobre a mensagem de erro do Redis, após os passos acima, ela só aparece quando o Docker está sendo parado. Na reinicialização, não é exibida, então acredito que isso esteja OK.

Obrigado!

Depois de ler isso, parei o Docker em nosso servidor Centos

systemctl stop docker

então o iniciei

systemctl start docker

problema resolvido.

Obrigado @pfaffman