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 -t filter -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 -t filter -D FORWARD -i docker0 -o docker0 -j DROP' failed: iptables: Bad rule (does a matching rule exist in that chain?).

도움이나 조언을 주시면 감사하겠습니다 :slight_smile:
미리 감사합니다!

iptables와 docker 관련 문제인 것 같습니다. 이 부분을 검색해 보세요. Discourse의 문제는 아닙니다.

redis 문제는 iptables나 docker보다는 discourse와 더 관련이 있을 것 같은데, 맞나요?

이것은 Docker 네트워킹이 깨졌음을 시사합니다. 즉, Discourse와 Redis가 정상적으로 작동하고 있더라도 네트워킹과/또는 Docker가 고장 나 있어 Discourse가 Redis에 접근할 수 없는 상태입니다.

제 추측으로는 firewalld를 설치한 시점 이후에 이러한 문제가 발생했을 가능성이 높으며, 그것이 설치를 망가뜨린 원인이었을 것입니다.

Jay, 감사합니다.

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가 중지될 때만 표시됩니다. 재시작 시에는 표시되지 않으므로 문제가 없다고 생각합니다.

감사합니다!

이 글을 읽고 CentOS 서버에서 Docker를 중지했습니다.

systemctl stop docker

그리고 다시 시작했습니다.

systemctl start docker

문제가 해결되었습니다.

@pfaffman 감사합니다.