inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

docker redis와 window redis 포트가 동일할 때 충돌이 나지 않는 이유

105

라쿠라쿠

작성한 질문수 3

0

안녕하세요. redis를 공부하던 중 궁금한 점이 생겨서 질문드립니다.

 

개발상황

window10

springboot 3.4.3

티스토리를 참고해서 redis 설치

window for docker 설치

 

문제상황

docker의 compose.yml을 생성해서 docker 이미지(springboot와 redis)를 생성해서 동작을 시켰습니다. 이때 window에서 동작 중인 redis를 중지시키지 않았지만 docker의 redis는 포트 충돌 없이 정상적으로 동작합니다. window와 docker에서 redis가 여전히 동작 중인 것은 확인했습니다.

 

Dockerfile

FROM openjdk:17-jdk

COPY build/libs/*SNAPSHOT.jar app.jar

ENTRYPOINT ["java", "-jar", "/app.jar"]

compose.yml

services:
  api-server:
    build: .
    ports:
      - 8080:8080
    depends_on:
      cache-server:
        condition: service_healthy
  cache-server:
    image: redis
    ports:
      - 6379:6379
    healthcheck:
      test: [ "CMD", "redis-cli", "ping" ]
      interval: 5s
      retries: 10

 

docker와 window에서 redis 서버를 동작시키는 상황에서 Windows 명령 프롬프트에서 netstat 명령어를 통해서 포트번호와 IP를 확인했습니다.

C:\Users>netstat -ano | findstr :6379
  TCP    0.0.0.0:6379           0.0.0.0:0              LISTENING       15492
  TCP    0.0.0.0:6379           0.0.0.0:0              LISTENING       19004
  TCP    [::]:6379              [::]:0                 LISTENING       15492
  TCP    [::1]:6379             [::]:0                 LISTENING       3800

아래는 docker redis만 동작시켰을 때 상황입니다.

C:\Users>netstat -ano | findstr :6379
  TCP    0.0.0.0:6379           0.0.0.0:0              LISTENING       15492
  TCP    [::]:6379              [::]:0                 LISTENING       15492
  TCP    [::1]:6379             [::]:0                 LISTENING       3800

아래는 window redis만 동작시켰을 때 상황입니다.

C:\Users>netstat -ano | findstr :6379
  TCP    0.0.0.0:6379           0.0.0.0:0              LISTENING       19004

 

질문

  1. redis는 docker와 window가 다른 네트워크 인터페이스를 가지고 있어서 포트 번호가 같아도 충돌이 나지않는걸까요?

  2. 그렇다면 왜 springboot 어플리케이션은 같은 포트로 동작시켰을 때 포트 충돌이 발생하지 않아야하는거 아닐까요? springboot 어플리케이션은 포트 충돌로 인해 docker 또는 window 둘 중 하나에서만 실행시킬 수 있습니다.

 

docker, redis에 깊은 이해를 하고 있지 않아서 많이 어려운 것 같습니다. 문제 접근 방식이 잘못된건지 저에게는 어렵네요

redis docker port window

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

라쿠라쿠님, 질문해주신 상황에 대한 답변입니다:

  1. 네트워크 인터페이스: Docker는 기본적으로 호스트 시스템과는 별도로 격리된 네트워크 환경에서 실행됩니다. 즉, Docker의 컨테이너는 자체 네트워크 인터페이스를 사용하기 때문에, 같은 포트 번호를 사용하더라도 호스트 시스템의 네트워크와는 격리되어 있어 충돌이 발생하지 않습니다. Docker는 내부적으로 IP 주소를 다르게 할당하고, 네트워크를 격리하여 내부의 서비스나 애플리케이션이 서로 다른 네트워크 상에서 동작하도록 합니다.

  2. Spring Boot 애플리케이션 포트 충돌: Spring Boot 애플리케이션이 호스트인 Windows 환경과 Docker 컨테이너에서 동시에 같은 포트로 실행될 때 포트 충돌이 발생하는 이유는, 두 애플리케이션이 같은 네트워크 인터페이스(즉, 호스트 네트워크)를 사용할 수 있기 때문입니다. 따라서, 같은 포트를 사용하려 하면 충돌이 발생할 수밖에 없습니다. Docker를 사용하여 Spring Boot 애플리케이션을 실행할 때, “host” 네트워크 모드가 아닌 “브리지” 네트워크 모드를 사용하면 서로 다른 네트워크 스페이스에서 실행되기 때문에 포트 충돌 없이 실행할 수 있습니다.

Docker의 네트워크 격리 개념을 이해하면 위 상황이 좀 더 명확하게 다가올 수 있습니다. 추가적으로 Docker의 네트워크 설정에 대해 더 깊이 학습하신다면 도움이 될 것입니다.

도움이 되셨길 바랍니다! 추가 문의 사항이 있다면 언제든지 질문해 주세요.

참고한 자료: Docker Compose와 Spring Boot 컨테이너 준비 상태 체크

부하 테스트 시 설정 관련 질문드립니다

1

23

1

섹션 2

0

12

1

"도커 이미지 생성" 18:59부분에 텍스트 파일로 정리 된거는 어디서 볼수 있나요?

0

17

1

pub/sub의 연결 객체에 대해 질문 드립니다.

0

16

2

build 시 에러 해결방법 공유(docker.desktop 업데이트 -> 의존성 버전 수정)

0

20

1

Request Failed 가 뜹니다.

0

28

2

ArticleReadService 관련 질문

0

29

1

kafka 이벤트 발행 실패 시 at-least-once를 보장하는 방법이 궁금합니다.

1

69

1

domain에 @Entity 와 Repository를 함께 둔 이유가 궁금합니다

1

50

1

혹시 강의 내용하면서 실습했던 것을 개인 깃에다 올려도 될까요?

0

25

1

Jib 이미지 빌드에서 docker credential 관련으로 이슈가 있다면

1

79

2

스크립트에 대해 질문 있습니다.

1

60

1

같은 사용자가 연속된 중복 호출할 경우 어떻게 되는지 궁금합니다!

2

71

1

조건 검색 질문

0

40

1

이거 지금 부터 들어도 괜찮을까요 ?? 시간이 꽤지난거같은데 .. 뭐 최신하고 아에 안맞을까요 .

0

39

1

자료를 다운로드후 압축을 풀때 오류납니다.

0

48

2

pod kubetm/app 에서 image를 갑자기 못가져 오는거 같습니다.

1

46

2

이지지 생성 노드를 커스텀 햇는데 워드프레스에 이미지 업로드가 안됨

0

32

2

3. Node Schedule 중 pod-5가 마스터 노드에 배치됩니다.

1

52

2

volume hostpath의 강의에 관해 질문이 있습니다.

1

41

2

댓글 삭제 로직에서 동시성 문제 발생 가능성

0

39

1

재고 감소와 쿠폰 발급은 왜 서로 다른 방식으로 동시성을 제어하나요?

0

56

2

n8n에서 오류가 발생했는데 어떻게 풀어야할까요?

0

41

2

소스코드즘 부탁드립니다.

0

48

1