타임트리

포트포워딩(포트매핑) 본문

Today I Learned/Docker

포트포워딩(포트매핑)

sean_j 2025. 5. 3. 01:47

PostgreSQL 컨테이너가 172.17.0.3이라는 가상 IP를 가지고 있고, 내부적으로 5432 포트에서 PostgreSQL 서비스를 제공하고 있다고 가정하자.

 

외부에서 이 컨테이너에 접속하려면 다음과 같은 단계를 거쳐야 한다:

  1. 외부 클라이언트 → 내 PC(서버)의 IP에 접근할 수 있어야 한다.
  2. 내 PC에서 받은 요청을 컨테이너의 5432 포트로 전달해줘야 한다.

1번을 위해서는 공유기나 라우터에서 공인 IP의 특정 포트를 내 PC의 포트로 포트포워딩해야 한다.
2번은 도커에서 -p 옵션을 통해 호스트와 컨테이너 간 포트 매핑(port binding) 을 설정함으로써 해결할 수 있다.

예를 들어 아래와 같은 명령어로 컨테이너를 실행한다고 하자:

docker run -p 3001:5432 postgres

 

이렇게 하면 다음과 같은 구조가 된다:

  • 내 PC의 3001번 포트에 들어온 요청이
  • 도커 내부 PostgreSQL 컨테이너의 5432번 포트로 전달된다.

이 상태에서는 내 PC 안에서 localhost:3001로 접속해도 PostgreSQL 컨테이너에 연결할 수 있다.

하지만 외부에서 접속하려면, 공유기에서 공인 IP의 3001 포트를 내 PC의 3001 포트로 포트포워딩 해줘야 한다. 이렇게 설정하면 외부 서버에서도 아래와 같이 접근할 수 있다:

[공인 IP]:3001 → [내 PC]:3001 → [컨테이너]:5432