도커 컨테이너에서 기본 브릿지 네트워크(bridge
네트워크) 환경에서 호스트 네임으로 접근이 불가능한 이유는 다음과 같습니다.
🔹 1. 기본 브릿지 네트워크의 구조
도커에서 기본적으로 제공하는 bridge
네트워크는 컨테이너 간 통신을 지원하지만, DNS 기반의 호스트 네임 해결(name resolution)은 제공하지 않습니다.
즉, 컨테이너 내부에서 다른 컨테이너의 이름(hostname)으로 접근이 불가능합니다.
bridge
네트워크에서는 컨테이너가 서로의 IP 주소로만 접근 가능합니다.- 컨테이너 이름을 통한 접근은 **사용자 정의 브릿지 네트워크(custom bridge network)**에서만 가능합니다.
🔹 2. 기본 브릿지 네트워크에서 호스트 네임을 인식할 수 없는 이유
docker0
브릿지 네트워크는 단순히 컨테이너 간 NAT(Network Address Translation) 연결만 제공하며, DNS 서비스를 포함하지 않습니다.- 따라서, 컨테이너에서 다른 컨테이너의 이름을 알아낼 방법이 없어, 기본적으로 컨테이너 이름을 통한 접근이 불가능합니다.
✅ 해결 방법
기본 브릿지 네트워크 대신 사용자 정의 브릿지 네트워크를 사용하면, 컨테이너 간 호스트 네임 기반의 접근이 가능해집니다.
# 사용자 정의 브릿지 네트워크 생성
docker network create my_bridge
# 해당 네트워크에 컨테이너 실행 (이름 지정)
docker run -d --name my_container1 --network my_bridge nginx
docker run -d --name my_container2 --network my_bridge alpine sleep 1000
# 컨테이너 내부에서 my_container1으로 접속
docker exec -it my_container2 ping my_container1
이렇게 하면 my_container2
에서 my_container1
을 호스트 네임으로 접근할 수 있습니다.
🔹 3. 컨테이너에서 호스트(host.docker.internal
) 접근 불가능한 경우
도커 컨테이너에서 호스트 머신에 접근하려고 할 때 host.docker.internal
도 인식되지 않는 경우가 있습니다.
✅ 해결 방법
- Linux 환경에서는 기본적으로
host.docker.internal
이 자동 설정되지 않음 --add-host
옵션을 사용하여 수동으로 호스트 IP를 추가
docker run -d --add-host=host.docker.internal:host-gateway my_container
✅ 정리
- 기본 브릿지 네트워크(
bridge
)에서는 컨테이너 간 호스트 네임으로 접근이 불가능 (IP로만 가능) - 사용자 정의 브릿지 네트워크를 사용하면 DNS 해석을 지원하여 컨테이너 이름으로 접근 가능
host.docker.internal
이 동작하지 않으면--add-host
옵션으로 수동 설정 필요
이제 컨테이너 간 호스트 네임으로 접근하려면 사용자 정의 네트워크를 활용하면 됩니다! 🚀