Docker 컨테이너 포트 매핑

1. Nginx 컨테이너 생성 (포트 매핑 미설정)
[root@localhost ~]# docker run --name nginx_container -d nginx
7be3673a4c0f8f7ffe79a7b11ab86c4327dacaf734ed574e88e28c1db2243716
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
7be3673a4c0f        nginx               "nginx -g 'daemon ..."   5 seconds ago       Up 4 seconds        80/tcp              nginx_container
2. 컨테이너 네트워크 정보 확인
[root@localhost ~]# docker network inspect bridge
{
    "Containers": {
        "7be3673a4c0f8f7ffe79a7b11ab86c4327dacaf734ed574e88e28c1db2243716": {
            "Name": "nginx_container",
            "IPv4Address": "172.17.0.2/16"
        }
    }
}
3. 컨테이너 IP 및 포트 테스트
[root@localhost ~]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.073 ms

[root@localhost ~]# curl -I 172.17.0.2
HTTP/1.1 200 OK

결론: 기본적으로 컨테이너 내 서비스 포트는 호스트 내부에서만 접근 가능합니다.

4. 명시적 포트 매핑 설정
[root@localhost ~]# docker rm -f nginx_container
[root@localhost ~]# docker run --name nginx_container -d -p 80:80 nginx
f1166a72ab910b425cf32b91ababde2a5b6a4fda6db08852bf7a99d925d4985f
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
f1166a72ab91        nginx               "nginx -g 'daemon ..."   3 seconds ago       Up 3 seconds        0.0.0.0:80->80/tcp   nginx_container

고정 IP 바인딩 설정: /etc/docker/daemon.json 파일에 다음과 같이 추가할 수 있습니다:

{
  "host": "0.0.0.0"
}
5. 자동 포트 할당 설정
[root@localhost ~]# docker rm -f nginx_container
[root@localhost ~]# docker run --name nginx_container -d -P nginx
8f9df2a803766862d08709b77054d35e890ca72c0ea17770dac8b3815278d35b
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
8f9df2a80376        nginx               "nginx -g 'daemon ..."   5 seconds ago       Up 5 seconds        0.0.0.0:10000->80/tcp   nginx_container

외부 접근 시 주의 사항: 호스트 IP 주소와 포트 번호를 반드시 확인해야 합니다.

6. -P 및 -p 파라미터 비교

-P 파라미터: 랜덤 포트 범위(ip_local_port_range)에 따라 호스트 포트를 자동 할당합니다.

[root@localhost ~]# cat /proc/sys/net/ipv4/ip_local_port_range
10000    65000

-p 파라미터: 명시적으로 호스트 포트와 컨테이너 포트를 지정할 수 있으며, 포트 범위도 지원합니다.

포트 매핑 형식 예시:
- 192.168.1.100:8080:80
- 8080:80
- :80

네트워크 규칙: 두 방식 모두 iptablesnat 테이블에 규칙을 추가합니다.

-p 80:80 사용 시:
iptables -t nat -vnL | grep :80
    0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:172.17.0.2:80

-P 사용 시:
iptables -t nat -vnL | grep :80
    0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:10000 to:172.17.0.2:80

태그: docker 포트매핑 네트워크구성 컨테이너네트워크 iptables

6월 20일 17:52에 게시됨