본문 바로가기

Docker

[docker-compose] docker-compose up에서 네트워크 생성이 되지 않을 때

# 발단

어떤 환경에서 발생하는지는 정확히 알 수 없지만, 회사의 서버에 도커를 설치하면 기본 ip 대역 생성이 되지않아 아래의 메세지와 함께 도커 실행이 되지 않았다.

Error starting daemon: Error initionalizing network controller

그래서 아래의 명령어로 직접 bridge ip를 추가해줬었다.

root$ ip link add name docker0 type bridge
root$ ip addr add dev docker0 172.17.0.1/16
root$ service docker start

 

 

# 문제

default 네트워크로 bridge를 사용하는 환경에서 컨테이너를 실행해서 잘 사용해오다가,

근래에 서버 점검할때마다 컨테이너가 한꺼번에 종료되는 일이 왕왕 발생해서 docker-compose로 정리를 했다.

알파에서 테스트를 마치고 라이브 서버에서 docker-compose up 명령을 실행하니,

다음과 같은 에러가 발생하면서 어떤 컨테이너도 실행되지 않았다.

ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network”

'docker network prune'으로 사용하지 않는 네트워크를 정리를 하면 해결된단 얘기가 있었으나 이 상황은 그렇지않았다.

검색해보니 보통은 컨테이너에 너무 많은 ip가 할당되면 이런 문제가 발생한다고 하는데,

내게는 이런 문제가 해당되지 않으니까 사용하지 않는 ip를 정리한다고 문제가 해결될것이 아니었다.

 

 

# 해결

그래서 생각하기를, 이 서버는 도커 네트워크 환경을 조성하려면 IP설정을 내가 직접 해줬어야 했으니까,

도커컴포즈도 대역 할당을 직접 해줘야하나? 싶어서 네트워크를 생성했다.

docker network create --driver==esmaster \
--subnet=172.72.0.0/16 \
--ip-range=172.72.0.0/24 \
--gateway=172.72.0.1 \
esmaster

그리고 docker-compose파일에도 각 서비스별로 network_mode: esmaster를 추가해줬더니, 서비스가 잘 올라왔다!

 

 

도커는 아.. 이젠 정말 네트워크 공부를 제대로 해야하나...싶게 만들다가도

약간의 직감으로 생각보다 빨리 문제가 해결되는 경우가 있어서 당혹스럽다.