🚀 Docker 컨테이너 포트 열기(Publishing Ports)
Docker를 처음 사용하는 분들이 가장 자주 마주하는 질문 중 하나는 바로 이것입니다.
"내가 실행한 Docker 컨테이너에 외부에서 접속하려면 어떻게 해야 하나요?"
정답은 컨테이너의 포트를 외부에 열어주는 것, 즉 Docker의 Port Publishing 기능을 활용하는 것입니다. 이번 글에서는 Docker 컨테이너에서 포트를 노출(publish) 하는 방법과 동작 원리를 자세히 알아보겠습니다.

🔍 Docker에서 "포트를 연다"는 의미는?
컨테이너 내부에서 실행되는 애플리케이션(예: 웹 서버)은 특정 포트(예: 80번 포트)에서 요청을 대기합니다.
하지만 이 포트는 기본적으로 외부에서는 접근할 수 없습니다.
즉, docker run 명령어로 컨테이너를 실행하더라도, 포트를 명시적으로 publish 하지 않으면 외부 브라우저나 API 클라이언트에서 접속할 수 없습니다.
🔐 포트 퍼블리시의 기본 구문
docker run -p [호스트포트]:[컨테이너포트] [이미지명]
예를 들어, 컨테이너 내부에서 80번 포트로 웹 서버가 열려있을 경우:
docker run -d -p 8080:80 nginx
위 명령은 다음과 같은 의미입니다:
- 컨테이너 내부의 80번 포트를 호스트의 8080번 포트에 연결
- 사용자는 웹 브라우저에서 http://localhost:8080 으로 접속 가능
🧪 실전 예제
1. Nginx 웹 서버 실행
docker run -d --name webserver -p 8080:80 nginx
- 컨테이너 이름: webserver
- 브라우저에서 http://localhost:8080 접속 → Nginx welcome page 확인 가능
2. Flask 앱 실행
Dockerfile 예시:
FROM python:3.11-slim
WORKDIR /app
COPY . .
RUN pip install flask
CMD ["python", "app.py"]
app.py:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Docker!"
app.run(host="0.0.0.0", port=5000)
빌드 후 실행:
docker build -t flask-app .
docker run -d -p 8080:5000 flask-app
→ http://localhost:8080 에 접속하면 Flask 앱이 동작!
⚙️ Docker Compose에서 포트 열기
docker-compose.yml에서 ports 옵션으로 지정할 수 있습니다:
services:
web:
image: nginx
ports:
- "8080:80"
→ docker compose up -d 실행 시 포트 자동 매핑
🌐 여러 포트를 동시에 노출할 수 있을까?
네. 다음처럼 여러 포트를 열 수 있습니다:
docker run -d -p 8080:80 -p 443:443 nginx
- 8080 → HTTP
- 443 → HTTPS (SSL 인증서 연동 시 사용)
🛑 퍼블리시 안 한 포트는?
만약 -p 옵션 없이 컨테이너를 실행했다면:
docker run -d nginx
이 경우, 컨테이너 안에서는 정상적으로 작동하더라도 외부에서는 접근이 불가능합니다. 이는 보안 측면에서는 장점이지만, 개발/테스트 목적이라면 명시적으로 포트를 열어줘야 합니다.
💡 Tip: 랜덤 포트 할당도 가능
docker run -d -P nginx
-P 옵션은 Docker가 컨테이너의 노출 가능한 모든 포트를 랜덤 호스트 포트에 매핑해줍니다.
확인 방법:
docker ps
→ PORTS 열에서 0.0.0.0:49153->80/tcp 와 같은 랜덤 포트 확인 가능
🧭 마무리
Docker 컨테이너에서 외부와 통신하려면 반드시 포트 퍼블리시(port publishing) 를 해주어야 합니다.
-p 호스트포트:컨테이너포트 형태만 이해하면 대부분의 웹/서버 기반 프로젝트에 Docker를 적용하는 데 문제가 없습니다.
이제 여러분도 Docker로 웹 서버, API 서버, DB 등을 자유롭게 외부와 연결해보세요!
📌 공식 문서 참고
https://docs.docker.com/get-started/docker-concepts/running-containers/publishing-ports/
Docker Desktop 설치 가이드 (윈도우 & 맥 완전 정복)
Docker Desktop 설치 가이드 (윈도우 & 맥 완전 정복)
🐳 Docker Desktop 설치 가이드 (윈도우 & 맥 완전 정복)Docker는 현대 소프트웨어 개발에서 필수 도구로 자리잡았습니다. 다양한 운영체제에서 컨테이너를 실행할 수 있게 해주며, 개발부터 배포까지
jjig810906.tistory.com
Docker Hub API 완전 정복 가이드
🚢 Docker Hub API 완전 정복 가이드 (최신 버전 기준)Docker는 현대 DevOps 환경에서 빼놓을 수 없는 컨테이너 기술입니다. 이 중 Docker Hub는 이미지 저장소 역할을 하며, 공식 이미지부터 커스텀 이미지
jjig810906.tistory.com
'Program' 카테고리의 다른 글
Docker로 개발하기: 컨테이너 기반 개발의 시작 (0) | 2025.06.05 |
---|---|
도커 이미지 레이어 완벽 이해하기: 효율적인 이미지 관리의 핵심 (0) | 2025.06.05 |
Docker Desktop 설치 가이드 (윈도우 & 맥 완전 정복) (3) | 2025.06.05 |
Docker Hub API 완전 정복 가이드 (0) | 2025.06.05 |
웹사이트 Input 창에서 붙여넣기 막는 방법 (javascript 코드 포함) (3) | 2025.06.05 |