728x90
Docker 네트워크는 컨테이너 간의 통신을 관리하는 핵심 기능입니다. 주요 명령어는 다음과 같습니다.
주요 명령어 목록
docker network create
- 네트워크 생성docker network ls
- 네트워크 목록 조회docker network inspect
- 네트워크 상세 정보 확인docker network connect
- 컨테이너를 네트워크에 연결docker network disconnect
- 컨테이너를 네트워크에서 분리docker network rm
- 네트워크 삭제docker network prune
- 사용하지 않는 네트워크 일괄 삭제
300x250
docker network create
새로운 네트워크를 생성합니다.
기본 구문
docker network create [OPTIONS] NETWORK
주요 옵션
-d, --driver
: 네트워크 드라이버 지정 (기본값: bridge)--subnet
: 서브넷 CIDR 형식 지정--gateway
: 게이트웨이 IP 주소 지정--ip-range
: IP 주소 할당 범위 지정--internal
: 외부 접근 제한--attachable
: Swarm 서비스가 아닌 컨테이너도 연결 가능--ipv6
: IPv6 지원 활성화
예시
# 기본 브리지 네트워크 생성
docker network create my-network
# 사용자 정의 서브넷으로 네트워크 생성
docker network create --subnet=172.20.0.0/16 --gateway=172.20.0.1 custom-network
# 오버레이 네트워크 생성 (Swarm 모드)
docker network create -d overlay --attachable my-overlay
docker network ls
모든 네트워크 목록을 표시합니다.
기본 구문
docker network ls [OPTIONS]
주요 옵션
-f, --filter
: 필터링 조건 적용--format
: 출력 형식 지정--no-trunc
: ID 전체 표시-q, --quiet
: ID만 표시
필터링 예시
# 브리지 드라이버만 표시
docker network ls --filter driver=bridge
# 특정 라벨이 있는 네트워크만 표시
docker network ls --filter label=production
# JSON 형식으로 출력
docker network ls --format json
docker network connect
실행 중인 컨테이너를 네트워크에 연결합니다.
기본 구문
docker network connect [OPTIONS] NETWORK CONTAINER
주요 옵션
--ip
: 특정 IP 주소 할당--alias
: 네트워크 내 별칭 설정--link
: 다른 컨테이너와 연결--driver-opt
: 드라이버별 옵션 설정
예시
# 기본 연결
docker network connect my-network container1
# 특정 IP 주소로 연결
docker network connect --ip 172.20.0.10 my-network container2
# 별칭 설정하여 연결
docker network connect --alias db-server my-network database-container
docker network disconnect
컨테이너를 네트워크에서 분리합니다.
기본 구문
docker network disconnect [OPTIONS] NETWORK CONTAINER
주요 옵션
-f, --force
: 강제 분리
예시
# 일반 분리
docker network disconnect my-network container1
# 강제 분리
docker network disconnect -f my-network container1
docker network inspect
네트워크의 상세 정보를 확인합니다.
기본 구문
docker network inspect [OPTIONS] NETWORK [NETWORK...]
주요 옵션
-f, --format
: 출력 형식 지정-v, --verbose
: 상세 정보 표시
예시
# 기본 정보 확인
docker network inspect my-network
# 특정 정보만 추출
docker network inspect -f '{{.IPAM.Config}}' my-network
docker network rm
네트워크를 삭제합니다.
기본 구문
docker network rm NETWORK [NETWORK...]
주요 옵션
-f, --force
: 네트워크가 없어도 오류 발생하지 않음
예시
# 단일 네트워크 삭제
docker network rm my-network
# 여러 네트워크 동시 삭제
docker network rm network1 network2 network3
docker network prune
사용하지 않는 모든 네트워크를 삭제합니다.
기본 구문
docker network prune [OPTIONS]
주요 옵션
--filter
: 필터 조건 적용-f, --force
: 확인 없이 삭제
예시
# 사용하지 않는 네트워크 모두 삭제
docker network prune
# 5분 이상 된 네트워크 삭제
docker network prune --filter until=5m
네트워크 드라이버 유형
Bridge (기본값)
- 단일 호스트에서 컨테이너 간 통신
- 가장 일반적으로 사용되는 드라이버
Host
- 호스트의 네트워크 스택 직접 사용
- 네트워크 격리 없음
Overlay
- 여러 Docker 호스트 간 통신
- Swarm 모드에서 주로 사용
None
- 네트워크 비활성화
- 완전한 네트워크 격리
Macvlan
- 컨테이너에 MAC 주소 할당
- 물리적 네트워크 장치처럼 동작
주요 장애/이슈 대응 방법 (FAQ)
Q1: "network not found" 오류 발생
원인: 지정한 네트워크가 존재하지 않음
해결방법
# 네트워크 목록 확인
docker network ls
# 네트워크 생성
docker network create [네트워크명]
Q2: 컨테이너 간 통신이 안 됨
원인: 다른 네트워크에 속해 있거나 네트워크 설정 문제
해결방법
# 컨테이너가 속한 네트워크 확인
docker inspect [컨테이너명] | grep NetworkMode
# 같은 네트워크에 연결
docker network connect [네트워크명] [컨테이너명]
# 방화벽 규칙 확인 (--internal 옵션 사용 여부)
docker network inspect [네트워크명]
Q3: IP 주소 충돌 발생
원인: 기존 네트워크와 서브넷이 겹침
해결방법
# 사용 중인 서브넷 확인
docker network ls
docker network inspect [네트워크명] | grep Subnet
# 다른 서브넷으로 네트워크 생성
docker network create --subnet=172.30.0.0/16 new-network
Q4: 네트워크 삭제 시 "has active endpoints" 오류
원인: 네트워크에 연결된 컨테이너가 있음
해결방법
# 네트워크에 연결된 컨테이너 확인
docker network inspect [네트워크명]
# 컨테이너 분리
docker network disconnect [네트워크명] [컨테이너명]
# 또는 컨테이너 정지 후 삭제
docker stop [컨테이너명]
docker rm [컨테이너명]
# 네트워크 삭제
docker network rm [네트워크명]
Q5: 외부에서 컨테이너 접속 불가
원인: 포트 매핑이 되어있지 않거나 방화벽 설정
해결방법
# 포트 매핑 확인
docker ps
# 포트 매핑하여 컨테이너 실행
docker run -p [호스트포트]:[컨테이너포트] [이미지명]
# 방화벽 규칙 확인 (Linux)
sudo iptables -L
Q6: DNS 해석 문제
원인: 컨테이너 내부 DNS 설정 문제
해결방법
# 사용자 정의 DNS 서버 지정
docker run --dns 8.8.8.8 [이미지명]
# 네트워크 별칭 사용
docker network connect --alias [별칭] [네트워크명] [컨테이너명]
Q7: 네트워크 성능 문제
원인: MTU 설정, 드라이버 선택 등
해결방법
# MTU 설정
docker network create -o "com.docker.network.driver.mtu"="1450" [네트워크명]
# 호스트 네트워크 사용 (성능 우선)
docker run --network host [이미지명]
Q8: Swarm 오버레이 네트워크 문제
원인: Swarm 노드 간 통신 문제
해결방법
# 필요한 포트 확인 (2377, 7946, 4789)
# 방화벽에서 해당 포트 열기
# attachable 옵션으로 재생성
docker network create -d overlay --attachable [네트워크명]
베스트 프랙티스
- 네트워크 이름 규칙: 용도별로 명확한 이름 사용 (예: frontend-network, backend-network)
- 서브넷 계획: 충돌을 피하기 위해 서브넷 대역 미리 계획
- 보안 고려사항
- 필요한 경우만 포트 노출
- internal 네트워크 활용
- 민감한 서비스는 별도 네트워크 격리
- 정기적인 정리:
docker network prune
명령으로 사용하지 않는 네트워크 정리 - 모니터링: 네트워크 상태와 성능을 주기적으로 확인
이러한 가이드라인을 따르면 Docker 네트워크를 효과적으로 관리하고 일반적인 문제들을 쉽게 해결할 수 있습니다.
728x90
그리드형(광고전용)
댓글