Docker를 다시 시작해도 driver failed programming external connectivity on endpoint에서 컨테이너를 시작할 수 없을 때의 해결 방법

환경


  • Windows 10
  • Docker for Windows Version 2.1.0.0(36874)
  • Docker version 19.03.1, build 74b1e89
  • docker-compose version 1.24.1, build 4667896b

  • 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 종료


  • 화면 오른쪽 하단의 작업 표시 줄에서 Docker 아이콘 (고래 아이콘)을 마우스 오른쪽 버튼으로 클릭합니다.
  • Quit Docker Desktop을 클릭하여 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라고 해소하지 않는 것이 상당히 있으므로 한번 종료하고 나서 기동하고 있습니다. 

    좋은 웹페이지 즐겨찾기