[트러블슈팅] docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:6379 -> 0.0.0.0:0: listen tcp 0.0.0.0:6379: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

그린·2024년 5월 14일
0

오류

목록 보기
17/17

출처 : https://velog.io/@dom_hxrdy/Cannot-start-service-backend-Ports-are-not-available-listen-tcp-0.0.0.03001-bind-An-attempt-was-made-to-access-a-socket-in-a-way-forbidden-by-its-access-permissions.-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0


문제 상황

docker run --rm -it -d -p 6379:6379 redis:6.2 명령으로
docker redis image를 실행하려고 하는데,

docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:6379 -> 0.0.0.0:0: listen tcp 0.0.0.0:6379: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

이런 오류가 뜨면서 ctrl + c 눌러도 종료도 안 되는 문제가 발생했다.

포트 겹치는 문제도 아니고.. 뭔가에 의해 막혀있는 느낌이였다.

결국 구글링을 하면서 해결하게 되었는데 나중에 필요할 때 바로 해결하려고 적어둡니다!

이 에러 메시지를 보면 해당 포트가 사용 불가능하다고 한다.

그래서, 이 컴퓨터에서 사용할 수 없는 포트 목록을 확인해야 한다.

윈도우 cmd를 켜서
netsh interface ipv4 show excludedportrange protocol=tcp
명령을 통해
해당 시작 포트 ~ 끝 포트 까지의 범위를 사용할 수 없다는 것을 알 수 있다고 한다.

(지금은 해결한 이후여서 위 사진에는 없지만,
아까 오류 해결할 때에는 6379 포트가 포함되는 범위가 나와 있었다.)


해결 방법

내가 원하는 포트를 미리 예약해두고, 다른 프로그램들이 이 포트를 사용하지 못하도록 할 수 있다!

컴퓨터를 부팅시킨 후에 아무것도 하지 않은 채로,
cmd를 관리자 권한으로 실행시켜서
netsh interface ipv4 show excludedportrange protocol=tcp
명령을 실행시켜보면,
아래와 같이 예약된 포트가 나온다. (부팅시킨 직후에는 일단 적은 범위들이다)

그런 후, 내가 원하는 포트를 예약해주면 된다.

나는 6379 포트와 3306 포트를 예약하고 싶어서 아래 명령어로 진행했다.

startport=???? numberofports=?
????번 포트부터 ~ ? 개의 포트를 사용하겠다는 의미!

// 6379 (redis)
netsh int ipv4 add excludedportrange protocol=tcp startport=6379 numberofports=1 store=persistent

// 3306 (mysql)
netsh int ipv4 add excludedportrange protocol=tcp startport=3306 numberofports=1 store=persistent

그런 후 다시 조회해보면,
내가 예약한 포트에 * 표시가 붙은 걸 확인할 수 있다.
이는 예약된 포트라는 의미이다!!

자세히 방법을 알려주신 글 작성자분 감사합니다!

profile
기록하자

0개의 댓글