Docker 는 컨테이너를 네트워크 드라이버가 만든 가상 네트워크에 붙인다. 아무 지정이 없으면 bridge 라는 기본 브리지 네트워크에 붙는데, 기본 브리지는 컨테이너 이름으로 서로를 찾지 못한다. 컨테이너끼리 이름으로 통신하려면 사용자 정의 브리지 네트워크를 만들어 붙인다 — Docker 내장 DNS 가 컨테이너 이름을 풀어 준다[1].
| 드라이버 | 내용 |
|---|---|
bridge |
기본. 호스트 안의 가상 브리지. 같은 네트워크의 컨테이너끼리 통신하고, 밖으로는 -p 로 포트를 연다 |
host |
컨테이너가 호스트 네트워크 네임스페이스를 그대로 쓴다. 포트 매핑 없음 |
none |
네트워크 없음. loopback 만 |
overlay |
Swarm 여러 호스트의 컨테이너를 하나의 네트워크로 잇는다 |
ipvlan · macvlan |
컨테이너를 호스트의 물리 네트워크에 직접 붙인다. macvlan 은 컨테이너마다 MAC 을 준다 |
대역이 사내망과 겹칠 때의 기본 대역 변경은 Docker network 대역 변경 을 본다.
docker network ls
docker network inspect bridge
docker network inspect my_network --format '{{range .Containers}}{{.Name}} {{.IPv4Address}}{{"\n"}}{{end}}'
docker network create my_network
docker network create --driver bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 my_network_with_subnet
docker network create --driver macvlan --subnet 192.168.1.0/24 --gateway 192.168.1.1 -o parent=eth0 macvlan_net
docker run -d --name web --network my_network nginx
docker run -d --name web2 --network my_network --ip 172.18.0.10 nginx
docker network connect my_network existing_container
docker network disconnect my_network existing_container
한 컨테이너를 여러 네트워크에 붙일 수 있다.
docker network rm my_network
docker network prune
컨테이너가 붙어 있는 네트워크는 지워지지 않는다. prune 은 아무 컨테이너도 안 붙은 네트워크를 전부 지운다.
-p <호스트포트>:<컨테이너포트> 로 호스트 밖에서 컨테이너에 닿게 한다. 호스트 주소를 앞에 붙이면 그 인터페이스에만 연다.
docker run -d -p 8080:80 nginx
docker run -d -p 127.0.0.1:8080:80 nginx
docker run -d -p 8080:80/udp some_udp_app
docker port <container>
같은 사용자 정의 네트워크의 컨테이너는 이름으로 찾는다.
docker network create test_net
docker run -d --name srv --network test_net nginx
docker run --rm --network test_net curlimages/curl -s http://srv/ | head -5
docker rm -f srv && docker network rm test_net
2026-09-20 확인. https://docs.docker.com/engine/network/ ↩︎