
멀티 서버 구성(app1: 8080, app2: 8081, mysql: 3306, redis: 6379)을 위해
docker-compose up -d --build를 실행했는데, 다음 에러가 발생했다.
Error response from daemon: failed to set up container networking:
driver failed programming external connectivity on endpoint redis
Bind for 0.0.0.0:6379 failed: port is already allocated
이전에 개별적으로 docker run으로 띄워뒀던 my-redis, mysql(또는 test) 컨테이너가
이미 각각 6379, 3306 포트를 점유하고 있었다.
Docker Compose가 새로운 redis, mysql 컨테이너를 만들려고 하니 같은 호스트 포트를 쓰려다 충돌한 것.
docker stop my-redis
docker stop test
docker rm my-redis
docker rm test
기존 개별 컨테이너를 정리한 뒤 다시 실행.
docker-compose down 후에도 남는 문제포트를 비웠는데도 이번엔 app1이 mysql이라는 호스트명을 못 찾는 에러가 발생했다.
Caused by: java.net.UnknownHostException: mysql: Name does not resolve
docker ps로 확인해보니 mysql, redis 컨테이너는 떠 있는데 app1, app2는 어느새 죽어 있었다.
원인은 이전 시도에서 꼬였던 네트워크 설정이 그대로 남아있었기 때문으로 추정.
docker-compose down # 컨테이너 + 네트워크까지 완전히 제거
docker-compose up -d --build
네트워크를 포함해 완전히 초기화한 뒤 다시 올리니,
app1이 mysql이라는 서비스 이름으로 정상 접속에 성공했다.
docker run 컨테이너와 docker-compose가 관리하는 컨테이너는 서로 다른 존재라,docker-compose down으로 네트워크까지 깨끗하게 지우고 다시 올리는 것이 생각보다 효과적이었다 (단순 재시작보다 네트워크 초기화가 핵심이었음).