Docker를 다시 시작해도 driver failed programming external connectivity on endpoint에서 컨테이너를 시작할 수 없을 때의 해결 방법
환경
Port 사용 중 오류 발생
개발 환경에서 PC를 다시 시작할 때마다
docker-compose up -d
에서 컨테이너를 시작하려고 할 때 발생하는 Cannot start service xxx: driver failed programming external connectivity on endpoint ~ bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
라는 다음 오류가 발생합니다.Creating mysql ...
Creating redis ... error
ERROR: for redis Cannot start service redis: driver failed programming external connectivity on endpoint redis (413f200ac5699af718e524d6cccc951244ae88bf828a0b9d285a99471e7c7bd5): Error starting userland proxy: listen tcp 0.0.0.0:6379: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
ERROR: for mysql Cannot start service mysql: driver failed programming external connectivity on endpoint mysql (703db6db03311aa08d34dceee81dd6d8507cc1ef41b1c2022a17d6fd504f8e1b): Error starting userland proxy: listen tcp 0.0.0.0:3310: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
ERROR: Encountered errors while bringing up the project.
통상은, 라고 할까 지금까지는 Docker for Windows를 재기동하면 해소되고 있었습니다.
귀찮다고 생각하면서도 거의 매번 Docker를 재기동하고 있었습니다.
Mac에서도 비슷한 오류가 발생하는 모양.
docker-compose up 하면 driver failed programming external connectivity on endpoint가 나왔다
재시작은 위의 기사와 유사합니다.
1. 작업 표시줄의 Docker 아이콘(고래 아이콘)을 마우스 오른쪽 버튼으로 클릭합니다.
2. Quit Docker Desktop 클릭1
3. 고래 아이콘이 사라지면 Docker 응용 프로그램을 시작합니다.
4. Docker가 시작되면
docker-compose up -d
로 컨테이너 시작Docker for Windows를 업데이트한 영향인지는 확실하지 않지만 Docker for Windows를 다시 시작해도 해결되지 않는 사건이 발생합니다.
2019년 9월 추가
다른 패턴의 에러문(Error starting userland proxy:/forwards/expose/port returned unexpected status: 500)이 나왔습니다만 같은 대응 방법으로 해소할 수 있었으므로, 추기해 둡니다.
Creating mysql ... error
ERROR: for mysql Cannot start service mysql: driver failed programming external connectivity on endpoint mysql (c9fa28746828b6645953a0a88e042e4bdf7cbe8ccd0e6c5db10e45c3fad51021): Error starting userland proxy: /forwards/expose/port returned unexpected status: 500
ERROR: Encountered errors while bringing up the project.
결론: 오류를 해결한 방법
아래에서 경위를 설명합니다만, 이번 포트를 잡고 놓지 않은 것은 Docker의
com.docker.backend.exe
라고 하는 프로세스였습니다.이 프로세스를 다시 시작하여 문제없이 시작할 수있었습니다.
일단 프로세스를 종료하므로 자기 책임으로 부탁드립니다.
그 밖에 좋은 방법을 아시는 분은 코멘트 받을 수 있으면 기쁩니다.
1. Docker for Windows 종료
2. com.docker.backend.exe 종료
Ctrl + alt + del
에서 작업 관리자를 시작하여 고급 탭을 엽니다. com.docker.backend.exe
라는 프로세스를 마우스 오른쪽 단추로 클릭하여 종료합니다. 3. Docker for Windows 재부팅
Docker for Windows를 다시 시작한 다음
docker-compose up -d
시작하면 컨테이너를 시작합니다.이것만으로 무사히 시작할 수 있었습니다.
$ docker-compose up -d
Creating network "default" with the default driver
Creating mysql ... done
Creating redis ... done
Creating nginx ... done
Creating rails ... done
경위: 원인을 조사해 보았다
우선 포트가 무엇에 사용되고 있는지 확인했습니다.
$ netstat -an | find "3310"
TCP 0.0.0.0:3310 0.0.0.0:0 LISTENING 11240
TCP [::]:3310 [::]:0 LISTENING 11240
Ctrl + alt + del
에서 작업 관리자를 시작하고 고급 탭을 확인합니다.PID가 같은 프로세스를 찾는다고 이전에 해설한
com.docker.backend.exe
가 이용하고 있는 상태였습니다.Docker를 종료해도 이 프로세스는 기동한 채.
문제의 프로그램에 관해서 검색해도 정보가 없고, 상세 불명이었으므로, 우선 컨테이너를 모두 종료시켜, 컨테이너, 네트워크, 이미지를 삭제해 보았습니다.
그래도 해소하지 않고.
고육의 방법으로 Windows를 재시작하면 보통으로 시작한다고 한다…
어쩌면 backend 프로세스 내에서 오류가 발생했을 수도 있습니다.
Docker를 다시 시작해도
driver failed programming external connectivity on endpoint
오류가 해결되지 않으면 위에서 설명한 방법을 사용해보십시오.「Restart」라도 좋을지도 모릅니다만, Restart라고 해소하지 않는 것이 상당히 있으므로 한번 종료하고 나서 기동하고 있습니다. ↩
Reference
이 문제에 관하여(Docker를 다시 시작해도 driver failed programming external connectivity on endpoint에서 컨테이너를 시작할 수 없을 때의 해결 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/masaoops/items/e79157ec89cd991ef8d2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)