Discourse 突然アクセスできなくなった

こんにちは!

Discourse インスタンスが動かなくなりました(こちら側での変更は行っていません)。

production.log に以下のメッセージが表示されています:
Error connecting to Redis on localhost:6379 (Errno::ENETUNREACH) subscribe failed,

これまでに試したことは以下の通りです:

  • サーバーの再起動
  • Docker の更新+サーバーの再起動+アプリの再ビルド

Docker と Discourse にあまり慣れていないため、他に何ができるかわかりません :frowning:

ホスト OS: CentOS 7
プロキシ: Apache
Docker: 最新バージョン

ホストには fail2ban と firewalld がインストールされています。
firewalld のログには奇妙な行が記録されていました:

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

ご助力やアドバイスがあれば幸いです :slight_smile:
事前にありがとうございます!

「いいね!」 2

iptables と Docker に何らかの問題があるようです。それらを検索してみてください。Discourse の問題ではありません。

「いいね!」 2

Redis の問題は、iptables や Docker ではなく、Discourse と関連している可能性が高いと思いますが、いかがでしょうか?

これは、Dockerのネットワークに問題があることを示唆しています。DiscourseとRedisが正常に動作していても、ネットワークやDocker自体に問題があるため、DiscourseからRedisにアクセスできない可能性があります。

私の推測では、これらの問題はfirewalldをインストールした後に発生し、それによってインストールが破損したのではないかと思われます。

「いいね!」 2

スティーブさん、ありがとうございます。

firewalld デーモンを停止し、Docker と問題のあるコンテナを再起動しましたが、エラーは同じままです(production.log):

Error connecting to Redis on localhost:6379 (Errno::ENETUNREACH) subscribe failed, reconnecting in 1 second.

Docker コンテナに接続しました:

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

Redis が実行されているのが確認できます:

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

何か心当たりはありますか?

少し進捗がありました。私の設定では、Apache 2.4 をプロキシとして使用しています。設定に以下の行を追加しました。

RemoteIPHeader X-Forwarded-For

これにより、元の IP アドレスを追跡できるようにしました。
httpd を再起動後、Discourse にアクセスできました(SSL 証明書有効期限に関するアラートが表示されましたが、これも修正済みです)。現在はすべて正常に動作していますが、firewalld は無効化された状態です。

CentOS 7 における Docker と firewalld の間の問題について、多くの投稿を見つけました。そのため、iptables に切り替える予定です。

Redis のエラーメッセージについては、上記の手順の後、このメッセージは Docker の停止時に表示されるのみです。再起動時には表示されないため、問題ないと思われます。

ありがとうございます!

「いいね!」 2

これを読んで、CentOSサーバーでDockerを停止しました

systemctl stop docker

そして再起動しました

systemctl start docker

問題は解決しました。

@pfaffman ありがとうございます。

「いいね!」 1