어느날 도커 컨테이너가 연결이 되지 않는다...

adam2·2019년 12월 8일
2

⚠️에러사전⚠️

목록 보기
2/4
post-thumbnail

안녕하세요. 오늘은 저의 도커 삽질기를 이야기해보려고 합니다.

⚠저는 일단... 아주 미천한 도커 실력을 갖고 있다는 것을 주의해주세요⚠
(필요할때 마다 검색해서 도커를 사용하는중...ㅜㅜ)


내가 직면한 상황

kibanaelasticsearch를 컨테이너화하여 아주 잘 사용하고 있었다!!!!
그렇게 평화로운 시절을 보내던 와중, 컨테이너가 돌아가는 서버에서 이것저것 실험을 해보다가... 갑자기 키바나에 연결이 되지 않았다.ㅜㅜ

엘라스틱서치 클러스터에 연결할수 없다... 라는 에러...
그래서 처음에는 엘라스틱 서치 서버가 다운된줄 알고 확인하였으나 엘라스틱서치는 문제가 없었다!

그다음으로 도커 컨테이너를 확인해보니 키바나에 할당되어 있던 포트가 사라져 있었다.

image.png

이런식으로 포트 할당 부분이 아예 사라져 있었다! (created는 무시해주세요)

첫번째 시도: kibana log 확인하기

키바나 페이지에서 말한대로 로그를 보고 문제를 확인하고 싶었다.
그래서 키바나의 log path를 검색해 컨테이너에 들어가 확인해보았지만 내 키바나 컨테이너에는 해당 path도, 로그 파일도 없었다..
로그를 보고 문제를 확인하는 것이 가장 best인 방법이라고 생각하는데 아무리 검색해봐도 내 컨테이너에는 없어서 이 방법은 포기했다...

그래서 엘라스틱 서버는 문제 없으니까 키바나 컨테이너를 다시 생성해서 연결하면 되지 않을까?🤔 라는 생각이 들어서 과감하게 kibana 컨테이너 삭.제!

image.png

프 ㄹㅣ 덤...! 주사위는 굴러졌다...! 🎲

두번째 시도: 일단 새로 만들어보자

이전의 기억들과 저장해두었던 레퍼런스들을 참조하여 일단 kibana 컨테이너를 만들어보았다.

( 그럼 똑같이 잘될줄 알았지....)

역시나 그렇듯... 컨테이너는 똑같이 작동하지 않.았.다 ^__^

무엇이 문제일까... 곱씹어 보다가 맨 처음 키바나와 엘라스틱서치를 함께 생성했을 때 둘의 네트워크를 연결해주었던 것이 생각났고 마침 검색해보니 kibana 컨테이너를 생성할 때 다들 엘라스틱서치와 네트워크를 연결해주었다.

대부분의 글들이 --link 옵션을 사용해 두개의 컨테이너를 연결했고, 나도 이 옵션을 사용해 연결해보았다.
그렇지만 역시나... 나에겐 먹히지 않.았.따......
image.png

2.2번째 시도: docker bridge

침착하게 docker network ls로 도커의 네트워크를 조회해 본다.

image.png

그리고 엘라스틱서치 컨테이너의 네트워크를 확인해본다.
docker inspect elasticsearch
image.png

현재 엘라스틱서치 컨테이너는 analysis_net이라는 네트워크에 연결되어 있고 이 네트워크는 bridge network 였다.
bridge networklink와는 다른 방식으로 컨테이너를 연결하는 방법으로 --net 옵션을 사용해 연결해준다. (둘에 대한 차이는 나중에 자세히 설명하겠다..)

bridge network 힌트를 얻고 바로 이를 연결하여 컨테이너를 만들었다.
docker run -d --name kibana --net analysis_net -p 5601:5601 kibana:6.8.5

두근두근... 이제 연결 됐겠지? 라는 마음으로 docker ps -a ...쳐본다...ㅎㅎ😚
결과는 역.시.나!!!!!!!!!!
image.png

세번째 시도 : 도커에 문제가 있다

Error response from daemon: Cannot start container b005715c40ea7d5821b15c44f5b7f902d4b39da7c83468f3e5d7c042e5fe3fbd: 
iptables failed: iptables --wait -t filter -A DOCKER ! -i docker0 -o docker0 -p tcp -d 172.17.0.43 --dport 80 -j 
ACCEPT: iptables: No chain/target/match by that name.
 (exit status 1)

계속해서 이런 에러가 나왔고, 또 다시 침착하게 구글링

이 에러의 원인은 IPTables에 Docker Chain 설정이 없어져서 발생한 에러였다.
Docker를 실행하면 IPTables에 Docker Chain을 만든다. 하지만 firewalld와 같은 다른 시스템에 의해 IPTables가 변경될 경우 이런 에러가 발생한다고 한다.

해결하는 방법은? 매우 간단!
chain들을 초기화하고, 도커를 재시작하면 된다!

sudo iptables -t filter -F
sudo iptables -t filter -X
systemctl restart docker

image.png

꺄악!!! 드디어 kibana가 다시 잘 실행된다!!!!!
(엘라스틱서치는 가볍게 restart해주면 잘 살아난다. )

이렇게 나의 3일간의 도커 삽질기는 끝이 났다!🤣

image.png

정리

  • 문제의 원인
    내가 ftp서버를 열면서 firewalld를 만졌었는데 그때문에 원래 있던 키바나 컨테이너의 chain이 사라졌던 것이었다.

  • 느낀점

  • 도커 컨테이너간 연결에 대해서 학습할 수 있었던 시간이었다.

  • Docker Chain에 대해서 공부가 필요하다. (포스팅 리스트 +1)

  • firewalld도 학습이 필요하다. 아직 방화벽 설정이 미숙하다😥

2개의 댓글

comment-user-thumbnail
2019년 12월 8일

펭수 시강.. 데브옵스는 어려워요 ㅠ

1개의 답글