Docker 네트워크 컨테이너끼리 통신하기

Docker 네트워크는 컨테이너가 독립적인 네트워크 구조로 컨테이너끼리는 통신할 수 없다. 컨테이너끼리 통신하려면 알려진 방법인 드라이버 브릿지를 이용해 서로 같은 네트워크망으로 묶는 방법이 있다.

Docker Network 조회하기

$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
ee7baa065db1   bridge    bridge    local
9ed8ea6f8d43   host      host      local
44f2be15c1fe   kind      bridge    local
53a13433a9d3   none      null      local

Docker는 기본 네트워크 제공으로 bridge, host, null 종류들이 있다.

Docker 네트워크 세부조회

$ docker network inspect ee7baa065db1
[
    {
        "Name": "bridge",
        "Id": "ee7baa065db1c35180d56a1e1a4b274261e29c35f211743a17dc4cbfa9402a16",
        "Created": "2026-04-28T20:04:26.004806518Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv4": true,
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },


컨테이너간 통신 설정

먼저 주어진 이미지를 다운로드 받고 서로 컨테이너를 시도해보자.

docker 이미지 가져오기

docker pull rockylinux:8

가져온 이미지들로 컨테이너를 실행시킨다.

docker 컨테이너 실행

docker run -it -d -p 80:80 --name rocky1 --hostname rocky1 rockylinux:8
docker run -it -d -p 81:80 --name rocky2 --hostname rocky2 rockylinux:8

해당 도커로 실행한 것은 별도의 로컬 IP로 갖추고 있어서 서로 통신이 안될 것이다.

docker 네트워크 실행하기

docker network create --driver=bridge main-network

기본 네트워크를 사용하지 않고 bridge 전용 네트워크를 생성하여 사용할 것이다.

docker 네트워크 연결하기

docker network connect main-network rocky1
docker network connect main-network rocky2

docker 생성한 rocky1 도커 네트워크

$ docker inspect rocky2
"main-network": {
                    "IPAMConfig": {},
                    "Links": null,
                    "Aliases": [],
                    "DriverOpts": {},
                    "GwPriority": 0,
                    "NetworkID": "0162fb9e3dc6d860def8c28b246d2d97c68c92e8f37162454104454103b9c01a",
                    "EndpointID": "22b791f79e386b3110b730f73e99ac8cf0610e1a2c213faf14f61d33aa16a913",
                    "Gateway": "172.19.0.1",
                    "IPAddress": "172.19.0.2",
                    "MacAddress": "8a:2f:ee:58:1a:c5",

docker 생성한 rocky1 도커 네트워크

$ docker inspect rocky2
"main-network": {
                    "IPAMConfig": {},
                    "Links": null,
                    "Aliases": [],
                    "DriverOpts": {},
                    "GwPriority": 0,
                    "NetworkID": "0162fb9e3dc6d860def8c28b246d2d97c68c92e8f37162454104454103b9c01a",
                    "EndpointID": "f265552dd93c6fe9e12066908eacf2705cda4550e3a36ecd55da82eba857607d",
                    "Gateway": "172.19.0.1",
                    "IPAddress": "172.19.0.3",
                    "MacAddress": "52:fc:d1:a8:c8:39",
                    ...
                }

할당된 네트워크가 추가한 것을 볼 수 있고, 서로의 IP Address 가 다르게 할당되었다.

docker 통신 확인

$ docker exec -it rocky1 /bin/bash
[root@rocky1 /]# ping 172.19.0.2
PING 172.19.0.2 (172.19.0.2) 56(84) bytes of data.
64 bytes from 172.19.0.2: icmp_seq=1 ttl=64 time=0.206 ms
64 bytes from 172.19.0.2: icmp_seq=2 ttl=64 time=0.066 ms
^C
--- 172.19.0.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1017ms
rtt min/avg/max/mdev = 0.066/0.136/0.206/0.070 ms
[root@rocky1 /]# ping 172.19.0.1
PING 172.19.0.1 (172.19.0.1) 56(84) bytes of data.
64 bytes from 172.19.0.1: icmp_seq=1 ttl=64 time=0.156 ms
64 bytes from 172.19.0.1: icmp_seq=2 ttl=64 time=0.096 ms
64 bytes from 172.19.0.1: icmp_seq=3 ttl=64 time=0.058 ms
^C
--- 172.19.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2054ms
rtt min/avg/max/mdev = 0.058/0.103/0.156/0.041 ms
[root@rocky1 /]#