programing

도커 - 0.0.0.0:4000에 대한 바인딩 실패: 포트가 이미 할당되었습니다.

minimums 2023. 9. 20. 20:12
반응형

도커 - 0.0.0.0:4000에 대한 바인딩 실패: 포트가 이미 할당되었습니다.

도커를 처음 사용하고 있는데 https://docs.docker.com/get-started/part2/ #tag-the-image를 구현하려고 했습니다.

어느 단계에서는 이 명령을 통해 localhost와 연결하려고 했습니다.

$ curl http://localhost:4000

이 오류를 알 수 있었습니다

curl: (7) Failed to connect to localhost port 4000: Connection refused

하지만 코드대로 해결했습니다. -

$ docker-machine ip default
$ curl http://192.168.99.100:4000

그 후로 모든 것이 잘 되어가지만 마지막 부분에서는 튜토리얼에 따라 팔로우 라인을 사용하여 앱을 실행하려고 했습니다.

$ docker run -p 4000:80 anibar/get-started:part1

그런데 이런 오류가 발생했습니다.

C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: driver failed programming external connectivity on endpoint goofy_bohr (63f5691ef18ad6d6389ef52c56198389c7a627e5fa4a79133d6bbf13953a7c98): Bind for 0.0.0.0:4000 failed: port is already allocated.

같은 포트를 사용하는 새 컨테이너를 실행하기 전에 이전에 실행한 컨테이너가 소멸되었는지 확인해야 합니다.

docker container ls
docker rm -f <container-name>

이고르 비즈에게 경의를 표하려면 현재 컨테이너 실행을 중지해야 합니다.현재 CONTAINER ID를 알게 될 경우:

$ docker container ls

당신은 다음과 같은 것을 얻습니다.

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
12a32e8928ef        friendlyhello       "python app.py"     51 seconds ago      Up 50 seconds       0.0.0.0:4000->80/tcp   romantic_tesla   

그런 다음 컨테이너를 정지합니다.

$ docker stop 12a32e8928ef

마지막으로 자신이 하고 싶었던 일을 하려고 합니다. 예를 들면 다음과 같습니다.

$ docker run -p 4000:80 friendlyhello

위의 모든 답변을 시도해 봤지만, 아무 것도 효과가 없었어요, 심지어 제 경우에도 말이죠.docker container ls실행 중인 컨테이너가 표시되지 않습니다.도커 프록시가 실행 중인 컨테이너가 없는데도 포트를 계속 사용하고 있기 때문에 문제가 생긴 것 같습니다.제 경우에는 우분투를 사용했습니다.문제를 해결하기 위해 시도한 것은 다음과 같습니다. 다음 두 가지 명령만 실행하면 됩니다.

sudo service docker stop
sudo rm -f /var/lib/docker/network/files/local-kv.db

이런 식으로 해결했습니다.

먼저 실행 중인 모든 컨테이너를 중지했습니다.

docker-compose down

그 다음에 나는 그를 실행했습니다.lsof포트를 사용하여 프로세스를 찾는 명령(나는 포트 9000 이었습니다.

sudo lsof -i -P -n | grep 9000

마지막으로 프로세스를 "죽였습니다"(제 경우에는 VSCode 확장 버전이었습니다).

kill -9 <process id>

빠른 수정은 다시 시작하는 도커입니다.

  1. sudo service docker stop
  2. sudo service docker start

위의 두 답변은 맞지만 저에게는 맞지 않았습니다.

  1. 는 .docker container lsenter image description here
  2. 엔 시도했어요, docker container ls -a그 후에는 이전에 모든 프로세스가 종료되고 실행되는 것을 보여줍니다.
  3. 그리고나서docker stop <container id>아니면docker container stop <container id>작동하지 않았습니다
  4. 그 다음에 노력했습니다.docker rm -f <container id>그리고 그것은 성공하였다.
  5. 이제 나는 이것을 시도했습니다.docker container ls -a그리고 이 과정은 존재하지 않았습니다.

nginx 도커 이미지를 사용했을 때도 다음과 같은 오류가 발생했습니다.

docker: Error response from daemon: driver failed programming external connectivity on endpoint recursing_knuth (9186f7d7f523732b99d3510029cde9679f3f3fe7b7eb5f612d54c4aacea58220): Bind for 0.0.0.0:8080 failed: port is already allocated.

그리고 다음 명령을 사용하여 해결했습니다.

$ docker container ls
$ docker stop [CONTAINER ID]

그런 다음 이 도커 컨테이너를 다시 실행해도 좋습니다.

$ docker run -v $PWD/vueDemo:/usr/share/nginx/html -p 8080:80 -d nginx:alpine

이전 도커 컨테이너를 멈추기만 하면 됩니다.

리눅스 'sudo systemctl restart docker'에서 문제를 해결해 주었습니다.

는 에 도 같은 있습니다.docker-compose :

  1. 킬드 도커-프록시
  2. 도커 다시 시작
  3. 도커-작곡 다시 시작

docker ps도커에서 실행 중인 컨테이너 목록이 나타납니다.필요한 포트에서 실행 중인 포트를 찾아 PID를 기록합니다.

다음 명령을 사용하여 해당 컨테이너를 멈추고 제거합니다.

docker stop PID
docker rm PID

docker-compose up필요한 포트를 확보한 상태에서 서비스를 실행할 수 있습니다.

Docker-Desktop을 사용하는 경우 Docker-Desktop을 종료한 후 다시 시작할 수 있습니다.그것은 저에게 그 문제를 해결해 주었습니다.

있는 에게.docker-compose가 둘 있을 다른 에) . (, ) .docker-compose stop 당신의 다른 프로젝트에서.

저 같은 경우에는 살해하는 과정이 없었습니다.

도커를 업데이트하면 문제가 해결되었습니다.

에 할 수 .docker-compose.yml그리고.docker-compose.override.yml또는 환경 변수를 사용하여 명시적으로 지정된 동일한 포트.

는이 .docker-compose.ymldocker-compose.override.yml동일한 포트 중 하나를 명시적으로 지정합니다.도커가 같은 컨테이너에 둘 다 열려고 한 것 같습니다.docker container ls -a컨테이너가 포트를 시작 및 나열할 수 없기 때문에 둘 다 나열되지 않았습니다.

실행 중인 컨테이너가 나타나지 않아 포트 9010을 사용하는 것은 아무것도 없었습니다(제 경우). 하지만 도커는 여전히 불평했습니다.

(Windows용) 도커를 재설정하고 싶지 않았기 때문에 이를 해결하기 위해 수행한 작업은 다음과 같습니다.

  1. (9010)에서 이 을 알고 . (9010)docker network ls docker network rm blabla (or id)
  2. 저는 사실 이전 네트워크가 아닌 새로운 네트워크를 사용했지만 필요하지 않습니다.
  3. 도커 다시 시작

그게 제게 유일한 방법이었습니다.설명할 수는 없지만 어찌된 일인지 "오래된" 네트워크는 여전히 해당 포트(9010)에 묶여 있었고 도커는 계속 "차단"했습니다(그에 대해 생각하고 있음).

윈도우의 경우, 도커가 사용하는 모든 프로세스를 제거하고 서비스에 대한 도커 서비스를 다시 시작했습니다.제 컨테이너는 지금 작동 중입니다.지금은 사용하지 않더라도 도커에서 여전히 사용 중인 포트에 대한 내용입니다.

리눅스에서 실행할 수 있는sudo netstat -tulpn해당 포트에서 현재 수신 중인 내용을 확인합니다.그런 다음 충돌을 방지하기 위해 해당 프로세스 또는 도커 컨테이너를 다른 포트에 바인딩하도록 구성할 수 있습니다.

컨테이너를 멈추게 하는 것은 저에게도 통하지 않았습니다.포트를 바꿨습니다.docker-compose.yml.

저는 같은 포트를 두매핑하는 것이 문제였습니다.

파라메트릭으로 인해docker run, 결국은 마치 그가닥

docker run -p 4000:80 -p 4000:80 anibar/get-started:part1

포트 4000에 이중 매핑이 있음을 알립니다.

이 경우 로그는 I가 이중 매핑의 원인이며 명령이 실패로 반환된 포트가 더 이상 바인딩되지 않음을 명시하지 않기 때문에 충분히 정보를 제공하지 않습니다.

도커 프로세스를 중지하는 방법

도커 자체를 멈추게 하기 <- 안전하고 빠르게 하기

이것은 컨테이너와 모든 멈출 수 없는 프로세스를 막는 가장 좋은 방법입니다. 도커가 그 일을 하도록 만드는 것입니다.


도커 설정 > 리소스로 이동합니다.리소스를 변경하고 적용 및 다시 시작을 클릭합니다.


도커는 자신과 그 모든 과정을 멈출 것입니다. 심지어 가장 완고한 것들도 일반적으로 사용되는 다른 명령들에 의해 죽지 않을 수도 있습니다.kill령 거친 을 내릴 수도 있습니다.rm남이 제시한

이전에 비슷한 문제에 부딪혔는데 동료들의 모든 좋은 - 적절한 - 팁이 어떻게든 해결되지 않았습니다. 나는 내 팀의 누군가가 나에게 이에 대해 물어볼 때마다 이 안전한 트릭을 공유합니다.

Error response from daemon: driver failed programming external connectivity on endpoint foobar
Bind for 0.0.0.0:8000 failed: port is already allocated

이것이 도움이 되기를 바랍니다!

무엇보다도 가장 쉬운 해결책을 잊지 마세요.

컴퓨터를 재부팅하세요.

위의 대부분을 시도해 보았지만 여전히 수정하지 못했습니다..restart my Mac그리고는 모두 정상으로 돌아갔습니다.

여전히 해결책을 찾고 있는 모든 사용자는 포트를 도커 컴포지트.yml에 올바르게 바인딩했는지 확인하십시오.

다음과 같습니다.- <EXTERNAL SERVER PORT>:<INTERNAL CONTAINER PORT>

같은 문제가 있었습니다.Mac용 Docker Dashboard(Docker for Mac 대시보드)로 이동하여 다시 시작을 클릭했습니다.문제는 해결됐습니다.

내 경우는 덤프 XD 포트 80을 두번 노출하고 있었습니다 :D

        ports:
            - '${APP_PORT:-80}:80'
            - '${APP_PORT:-8080}:8080'

APP_PORT가 정의되어 있으므로 80이 두 번 노출되었습니다.

저는 거의 모든 해결책을 시도해 보았고 가능성이 있는/가능한 이유/해결책을 발견했습니다.그래서, 만약 여러분이 사용한다면.traefik또는 다른 네트워킹 서버는 내부적으로 로드 밸런싱을 위한 프록시를 용이하게 합니다.대부분 설계도를 그대로 사용하면 꽤 잘 작동합니다.합니다.nginx또는 유사한 프록시 서버.까,춰,여()networking server아니면 가지치기가 도움이 되지 않을 수도 있습니다.

에 대한 솔루션traefik와 함께nginx,

sudo /etc/init.d/nginx stop
# or
sudo service nginx stop
# or
sudo systemctl stop nginx

크레딧

그런 다음 Mac용 도커 데스크톱에서 문제 해결 메뉴를 클릭한 다음 도커 데스크톱 재시작을 클릭했습니다.

컴퓨터를 다시 시작하기만 하면 도커 서비스가 다시 시작됩니다.

언급URL : https://stackoverflow.com/questions/46176584/docker-bind-for-0-0-0-04000-failed-port-is-already-allocated

반응형