페이지
  • 개인정보처리방침
  • 이용약관
  • 문의
  • 소개 (About)
  • 자주 묻는 질문 (FAQ)
  • 전체 글
  • IT

    도커 네트워크 기초 정리|컨테이너끼리 통신하는 법 3가지

    2026.08.19 조회 0
    도커 네트워크 개념도, 브리지와 호스트 네트워크로 컨테이너끼리 통신하는 법을 설명하는 이미지
    LINK&TEM GUIDE

    도커 네트워크 기초 정리|컨테이너끼리 통신하는 법 3가지

    브리지부터 커스텀 네트워크까지, 컨테이너 통신의 원리를 한 번에

    📌 핵심 요약
    • 도커 네트워크는 기본적으로 브리지·호스트·오버레이·none 네 가지 드라이버로 나뉩니다.
    • 같은 커스텀 브리지 네트워크에 있으면 컨테이너끼리 이름(DNS)만으로 통신할 수 있습니다.
    • 기본 브리지 네트워크는 이름 기반 DNS를 지원하지 않아 자주 오해가 생깁니다.
    • docker network create/connect 명령어만 알면 대부분의 통신 문제를 해결할 수 있습니다.
    • 통신 실패의 절반은 네트워크가 아니라 포트·컨테이너명 오타 문제입니다.
    목차
    1. 도커 네트워크란? 컨테이너 통신의 기본 원리
    2. 도커 네트워크 종류 – 브리지, 호스트, 오버레이 차이
    3. 컨테이너끼리 통신하는 법 – 같은 네트워크로 연결하기
    4. docker network 명령어로 직접 만들고 관리하기
    5. 도커 네트워크 통신 안 될 때 자주 하는 실수

    도커 네트워크 설정을 건드린 적도 없는데, 컨테이너 A에서 컨테이너 B로 요청이 안 갈 때가 있습니다.

    로그를 봐도 에러는 “connection refused”뿐이라 뭐부터 봐야 할지 막막해집니다.

    사실 이런 문제는 대부분 도커 네트워크의 동작 원리를 정확히 몰라서 생깁니다. 컨테이너는 기본적으로 서로 격리돼 있고, 같은 네트워크에 있어야만 이름으로 찾을 수 있기 때문입니다.

    이 글에서는 브리지·호스트 네트워크의 차이부터 컨테이너끼리 실제로 통신하게 만드는 방법, 그리고 실무에서 자주 막히는 지점까지 순서대로 정리합니다.

    도커 네트워크란? 컨테이너 통신의 기본 원리

    도커 네트워크는 컨테이너들이 서로 통신할 수 있게 해주는 가상의 통신 레이어입니다. 리눅스 커널의 네임스페이스와 브리지 기능을 이용해 만들어집니다.

    도커를 설치하면 자동으로 bridge, host, none 세 가지 기본 네트워크가 생깁니다. 특별히 지정하지 않으면 컨테이너는 기본 브리지 네트워크에 붙습니다.

    여기서 중요한 원칙이 있습니다. 도커는 기본적으로 각 컨테이너를 격리된 존재로 취급합니다. 같은 네트워크에 속해 있어야만 서로를 인식하고 트래픽을 주고받을 수 있습니다.

    🔍 Link&Tem Insight

    도커 네트워크는 실제 물리 네트워크가 아니라 리눅스 브리지 인터페이스(예: docker0)로 구현됩니다. 컨테이너가 생성될 때마다 가상 이더넷 페어(veth pair)가 만들어져 브리지에 연결되는 방식입니다. 이 구조를 알면 “왜 컨테이너 IP가 재시작할 때마다 바뀌는지”도 자연스럽게 이해됩니다.

    예를 들어 docker run -d --name web nginx로 컨테이너를 띄우면, 이 컨테이너는 172.17.0.x 대역의 IP를 자동으로 할당받습니다. 이 IP는 컨테이너를 재시작하면 바뀔 수 있어 직접 참조는 권장되지 않습니다.

    실무에서 자주 하는 실수는 이 IP를 코드에 하드코딩하는 것입니다. 컨테이너가 재생성되면 IP가 바뀌어 연결이 끊기기 때문에, 이름 기반 통신을 쓰는 게 정석입니다.

    📘 도커 공식 네트워킹 개요 보기

    도커 네트워크 종류 – 브리지, 호스트, 오버레이 차이

    도커 네트워크는 용도에 따라 드라이버가 나뉩니다. 어떤 드라이버를 쓰느냐에 따라 컨테이너가 서로를 보는 방식이 완전히 달라집니다.

    브리지는 가장 기본이 되는 드라이버입니다. 한 호스트 안에서 컨테이너 여러 개가 통신해야 할 때 씁니다. 기본 브리지와 사용자 정의 브리지는 동작이 다릅니다.

    호스트 네트워크는 컨테이너와 호스트의 네트워크 스택을 아예 공유합니다. 격리가 사라지는 대신 성능 손실이 거의 없습니다.

    드라이버특징언제 쓰나
    bridge격리된 가상 네트워크, 기본값한 호스트 내 컨테이너 통신
    host호스트 네트워크 그대로 사용포트 성능이 중요할 때
    overlay여러 호스트를 하나로 연결Swarm 등 멀티 호스트
    none네트워크 완전 비활성화외부 접근 차단이 필요할 때

    실제 서비스 규모별로 보면 선택이 명확해집니다. 컨테이너 2~3개짜리 소규모 프로젝트는 사용자 정의 브리지 하나면 충분합니다.

    여러 서버에 걸친 클러스터를 운영한다면 오버레이 네트워크가 필요합니다. Docker Swarm이나 Kubernetes 환경에서 주로 쓰입니다.

    💡 TIP

    도커 네트워크 드라이버를 고를 때는 “컨테이너가 몇 대 호스트에 걸쳐 있는가”부터 확인하세요. 한 대면 브리지, 여러 대면 오버레이입니다. host는 성능이 급할 때만 예외적으로 씁니다.
    📘 도커 네트워크 드라이버 공식 문서

    컨테이너끼리 통신하는 법 – 같은 네트워크로 연결하기

    컨테이너끼리 통신하는 법의 핵심은 딱 하나입니다. 같은 사용자 정의 네트워크에 두 컨테이너를 모두 연결하는 것입니다.

    기본 브리지 네트워크는 이름 기반 DNS를 지원하지 않습니다. 그래서 docker network create로 커스텀 네트워크를 만들어 쓰는 게 표준 방식입니다.

    예를 들어 docker network create app-net으로 네트워크를 만들고, docker run --network app-net --name db mysql처럼 컨테이너를 붙입니다. 다른 컨테이너도 같은 네트워크에 연결하면, 서로 db, web 같은 컨테이너 이름으로 접근할 수 있습니다.

    즉 애플리케이션 컨테이너 안에서 데이터베이스 접속 주소를 IP 대신 db:3306처럼 컨테이너 이름으로 쓰면 됩니다. 이게 바로 도커의 내장 DNS 기능입니다.

    포트 노출도 헷갈리는 부분입니다. 같은 네트워크 안 컨테이너끼리는 -p 옵션 없이도 컨테이너가 리슨 중인 포트로 바로 접근됩니다. -p는 호스트 외부에 열 때만 필요합니다.

    ⚠️ 주의할 점

    가장 흔한 실수는 서로 다른 네트워크에 있는 컨테이너끼리 이름으로 통신하려는 경우입니다. 네트워크가 다르면 이름 조회 자체가 실패합니다. docker network inspect [네트워크명]으로 두 컨테이너가 실제로 같은 네트워크에 있는지부터 확인하세요.

    docker-compose를 쓴다면 더 간단합니다. 같은 compose 파일 안의 서비스들은 기본적으로 하나의 네트워크에 자동으로 묶여 서로 서비스 이름으로 통신할 수 있습니다.

    docker network 명령어로 직접 만들고 관리하기

    네트워크 원리를 알았다면 실제로 다뤄볼 차례입니다. 도커 네트워크 관리는 몇 개 명령어만 익히면 충분합니다.

    가장 먼저 알아야 할 건 docker network create입니다. 기본값은 브리지 드라이버이며, --driver 옵션으로 다른 타입을 지정할 수 있습니다.

    이미 실행 중인 컨테이너를 다른 네트워크에 추가로 붙이고 싶다면 docker network connect를 쓰면 됩니다. 컨테이너를 재시작하지 않아도 즉시 적용됩니다.

    명령어역할
    docker network create [이름]새 네트워크 생성
    docker network ls전체 네트워크 목록 확인
    docker network inspect [이름]연결된 컨테이너·IP 상세 확인
    docker network connect [네트워크] [컨테이너]실행 중인 컨테이너를 네트워크에 추가
    docker network prune사용하지 않는 네트워크 일괄 삭제

    특히 docker network inspect는 문제 진단의 시작점입니다. 어떤 컨테이너가 어떤 IP로 이 네트워크에 붙어 있는지 JSON 형태로 전부 보여줍니다.

    불필요한 네트워크가 계속 쌓이는 것도 흔한 문제입니다. 테스트용으로 만든 네트워크를 지우지 않고 방치하면 docker network ls 결과가 지저분해집니다.

    💡 TIP

    네트워크를 정리할 때는 docker network prune 전에 docker network ls로 목록을 먼저 확인하세요. 실행 중인 컨테이너가 물려 있는 네트워크는 자동으로 제외되지만, 습관적으로 확인하면 실수를 줄일 수 있습니다.
    📘 docker network 명령어 공식 레퍼런스

    도커 네트워크 통신 안 될 때 자주 하는 실수

    도커 네트워크 설정을 제대로 했는데도 통신이 안 되는 경우가 있습니다. 대부분 원인은 몇 가지로 압축됩니다.

    첫 번째는 서로 다른 네트워크에 컨테이너가 나뉘어 있는 경우입니다. compose 파일이 여러 개거나 프로젝트명이 다르면 의도치 않게 네트워크가 분리됩니다.

    두 번째는 포트 번호 혼동입니다. 컨테이너 내부 포트와 호스트에 노출한 포트를 헷갈려서 잘못된 주소로 접속을 시도하는 경우가 많습니다.

    세 번째는 방화벽이나 보안 그룹입니다. 클라우드 환경에서는 도커 네트워크 자체는 정상인데, 호스트 레벨의 iptables나 보안 그룹이 트래픽을 막는 경우도 흔합니다.

    네 번째는 애플리케이션이 localhost에만 바인딩된 경우입니다. 컨테이너 안에서 127.0.0.1로만 리슨하면 같은 네트워크의 다른 컨테이너에서도 접근할 수 없습니다. 0.0.0.0으로 바인딩해야 합니다.

    🔍 Link&Tem Insight

    문제를 진단할 때는 docker exec -it [컨테이너] ping [다른컨테이너명]부터 시도해보세요. 이름 조회 자체가 실패하면 네트워크 분리 문제고, 이름은 통과하는데 특정 포트만 막히면 애플리케이션 바인딩이나 방화벽 문제일 가능성이 큽니다.
    ⚠️ 주의할 점

    기본 브리지 네트워크에서는 컨테이너 이름으로 통신이 안 되는 게 정상입니다. 실수가 아니라 도커의 기본 사양이므로, 반드시 사용자 정의 네트워크를 만들어 사용하세요.

    자주 묻는 질문

    Q. 기본 브리지 네트워크와 사용자 정의 브리지는 뭐가 다른가요?

    기본 브리지는 이름 기반 DNS를 지원하지 않아 IP로만 접근해야 합니다. 사용자 정의 브리지는 컨테이너 이름으로 서로를 찾을 수 있어 실무에서는 항상 후자를 권장합니다.

    Q. 컨테이너를 여러 네트워크에 동시에 연결할 수 있나요?

    가능합니다. docker network connect로 실행 중인 컨테이너를 추가 네트워크에 붙일 수 있고, 한 컨테이너가 여러 네트워크에 동시에 속할 수 있습니다.

    Q. docker-compose를 쓰면 네트워크를 직접 만들 필요가 없나요?

    compose는 프로젝트별로 기본 네트워크를 자동 생성해줍니다. 다만 여러 compose 프로젝트 간 통신이 필요하면 외부 네트워크를 따로 정의해 연결해야 합니다.

    Q. 컨테이너 IP를 고정할 수 있나요?

    사용자 정의 브리지 네트워크에서는 --ip 옵션으로 고정 IP를 지정할 수 있습니다. 다만 이름 기반 통신이 가능하다면 굳이 고정할 필요는 없습니다.

    Q. host 네트워크는 왜 조심해서 써야 하나요?

    컨테이너와 호스트의 포트가 그대로 겹치기 때문에 포트 충돌이 발생하기 쉽고, 네트워크 격리가 사라져 보안 측면에서도 불리합니다.

    📖 핵심 용어 미니 사전

    본문에 나온 용어가 낯설다면 아래에서 먼저 확인해보세요.

    브리지(bridge)

    한 호스트 안에서 컨테이너끼리 통신하게 해주는 기본 네트워크 드라이버입니다.

    veth pair

    컨테이너와 브리지를 연결하는 가상 이더넷 인터페이스 쌍입니다.

    오버레이(overlay)

    여러 대의 도커 호스트를 하나의 네트워크처럼 묶어주는 드라이버입니다.

    내장 DNS

    같은 네트워크 내 컨테이너 이름을 IP로 자동 변환해주는 도커의 기능입니다.

    🔗 공식 자료

    📘 도커 공식 네트워킹 개요 보기 📘 도커 네트워크 드라이버 공식 문서 📘 docker network 명령어 공식 레퍼런스 📘 Docker Compose 네트워크 설정 공식 문서

    📖 출처

    Docker 공식 문서 – Networking overview, Network drivers, docker network CLI 레퍼런스, Compose 네트워크 설정 가이드를 참고했습니다.

    Link&Tem 한 줄 정리

    도커 네트워크의 핵심은 “같은 네트워크에 있어야 이름으로 통신 가능하다”는 원칙 하나입니다. 기본 브리지 대신 사용자 정의 네트워크를 만들어 쓰면 컨테이너끼리 통신하는 법이 훨씬 단순해집니다.

    답글 남기기

    이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다