Discourse improvvisamente non più accessibile

Ciao!

La mia istanza di Discourse non funziona più (non è stato fatto nulla da parte mia).

Nel file production.log ho trovato questo messaggio:
Error connecting to Redis on localhost:6379 (Errno::ENETUNREACH) subscribe failed,

Ho provato quanto segue finora:

  • Riavvio del server
  • Aggiornamento di Docker + riavvio del server + ricostruzione dell’app

Sono piuttosto nuovo su Docker e Discourse, quindi non vedo cosa altro possa fare :frowning:

Sistema operativo host: CentOS 7
Proxy: Apache
Docker: versione più recente

Sull’host ho installato fail2ban e firewalld.
Nel log di firewalld ho trovato queste righe strane:

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?).

Qualsiasi aiuto o consiglio sarebbe apprezzato :slight_smile:
Grazie in anticipo!

Sembra esserci un problema con iptables e Docker. Questi sono gli argomenti da cercare. Non si tratta di un problema di Discourse.

Immagino che il problema di Redis sia più legato a Discourse che a iptables / Docker, no?

Questo mi fa pensare che la rete Docker sia rotta, quindi anche se Discourse e Redis funzionano correttamente, Discourse non può accedere a Redis perché la rete e/o Docker sono danneggiati.

Penso che questi problemi siano comparsi poco dopo l’installazione di firewalld e che sia proprio questo a aver compromesso la tua installazione.

Grazie Jay.

Ho fermato il demone firewalld, riavviato Docker e il container problematico, ma l’errore rimane lo stesso (in production.log):

Errore di connessione a Redis su localhost:6379 (Errno::ENETUNREACH) sottoscrizione fallita, riconnessione tra 1 secondo.

Mi sono connesso al container Docker:

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

Posso vedere che Redis è in esecuzione:

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

Hai qualche idea?

Ho fatto qualche progresso. La mia configurazione utilizza Apache 2.4 come proxy. Nella mia configurazione, ho aggiunto quanto segue:

RemoteIPHeader X-Forwarded-For

Per tenere traccia dell’indirizzo IP originale.
Dopo il riavvio di httpd, sono riuscito ad accedere a Discourse (con un avviso relativo alla scadenza del certificato SSL). Ho risolto anche questo problema e ora tutto funziona bene, ma con firewalld disabilitato.

Ho trovato molti post su problemi tra Docker e firewalld su CentOS 7. Quindi passerò di nuovo a iptables.

Per quanto riguarda il messaggio di errore di Redis, dopo i passaggi sopra descritti, questo appare solo quando Docker si arresta. Al riavvio non viene visualizzato, quindi penso che sia corretto.

Grazie!

Dopo aver letto questo ho fermato Docker sul nostro server Centos

systemctl stop docker

poi l’ho avviato

systemctl start docker

problema risolto.

Grazie @pfaffman