개발 이야기/인프라

[Docker] bind: address already in use

제이온 (Jayon) 2021. 10. 8.

안녕하세요? 제이온입니다.

이번 포스팅에서는 도커를 사용하다가 발생한 오류를 설명하고, 해결 방법을 공유하고자 합니다.

 

에러 전문

ERROR: for elk_elasticsearch_1  
Cannot start service elasticsearch: driver failed programming external connectivity 
on endpoint elk_elasticsearch_1 
(a842a43a72518fc8f8f1231a3503e2641e3a641658c1fde6aa71125ed6665dcb): 
Error starting userland proxy: listen tcp4 0.0.0.0:9300: bind: address already in use

 

문제의 원인

정확한 이유는 잘 모르겠으나, 주로 도커 컨테이너를 제대로 내리지 않고 빡종하는 경우 종종 발생했습니다. 에러를 읽어보면 알 수 있듯이, 특정 포트를 이미 사용하고 있어서 컨테이너를 띄우지 못하는 것입니다. 저 같은 경우는 Elasticsearch 컨테이너를 띄우려다보니 이런 현상이 발생했습니다.

 

해결 방법

docker stop $(docker ps -a -q) # Stop all containers
docker rm -fv $(docker ps -aq)  # Remove all containers
sudo lsof -i -P -n | grep <port number>  # List who's using the port

 

위 코드처럼 도커 컨테이너를 전부 멈추고, 싹다 지운 다음에 방금 전 에러에서 사용 중이던 포트 번호를 점유하고 있는 프로세스를 찾아냅니다. 이후 'kill -9 [프로세스 ID]' 명령어를 실행하여 해당 프로세스를 종료하면 됩니다.

댓글

추천 글