컨테이너 연결 문제 해결
연결 문제가 없으면 이 단계를 건너뛸 수 있습니다.
이제 컨테이너 간의 연결을 테스트하는 방법을 이해했으므로 일반적인 연결 문제를 해결하는 방법을 살펴보겠습니다.
일반적인 연결 문제
Docker 컨테이너 네트워크를 다룰 때 다음과 같은 몇 가지 일반적인 문제가 발생할 수 있습니다.
- 적절한 라우팅 없이 서로 다른 네트워크의 컨테이너
- 방화벽 또는 보안 그룹 설정이 트래픽을 차단함
- 애플리케이션이 예상 IP/포트에서 수신 대기하지 않음
- 네트워크 구성 오류
- DNS 확인 문제
이러한 잠재적인 문제 각각에 대한 문제 해결 단계를 살펴보겠습니다.
네트워크 구성 확인
먼저 컨테이너의 네트워크 구성을 살펴보겠습니다.
## View container1's network interfaces
docker exec container1 ip addr show
## View container2's network interfaces
docker exec container2 ip addr show
출력은 각 컨테이너의 모든 네트워크 인터페이스를 보여줍니다. 각 연결된 Docker 네트워크는 할당된 IP 주소와 함께 eth 인터페이스로 나타납니다.
네트워크 경로 확인
컨테이너의 라우팅 구성을 확인해 보겠습니다.
docker exec container1 route -n
이는 container1 의 라우팅 테이블을 표시하여 네트워크 트래픽이 어디로 전송되는지 나타냅니다.
수신 대기 포트 확인
애플리케이션이 연결을 제대로 수신 대기하는지 확인하려면 다음을 사용하십시오.
docker exec container2 netstat -tuln
이는 모든 TCP 및 UDP 수신 대기 포트를 표시합니다. HTTP 서버는 포트 8080 에서 수신 대기해야 합니다.
tcpdump 로 진단
보다 자세한 네트워크 트래픽 분석을 위해 tcpdump를 사용하여 패킷을 캡처하고 분석할 수 있습니다.
## Install tcpdump in container1
docker exec container1 apt-get install -y tcpdump dnsutils
## Capture packets for 10 seconds
docker exec container1 timeout 10 tcpdump -i eth0 -n
이것이 실행되는 동안 다른 터미널을 열고 일부 트래픽을 생성합니다.
docker exec container1 ping -c 3 container2
tcpdump 출력에서 ICMP 패킷이 캡처되는 것을 볼 수 있습니다.
Docker DNS 확인 확인
컨테이너 간의 DNS 확인에 문제가 있는 경우:
## Check the DNS configuration
docker exec container1 cat /etc/resolv.conf
## Test DNS resolution
docker exec container1 nslookup container2
네트워크 문제 시뮬레이션
container1 을 사용자 지정 네트워크에서 일시적으로 분리하여 연결 문제를 시뮬레이션해 보겠습니다.
## Disconnect container1 from my-network
docker network disconnect my-network container1
## Try to ping by name (this should fail)
docker exec container1 ping -c 2 container2
공유 네트워크에서 분리된 후 container1 이 더 이상 이름으로 container2 를 확인할 수 없으므로 ping 이 실패하는 것을 볼 수 있습니다.
다시 연결해 보겠습니다.
## Reconnect container1 to my-network
docker network connect my-network container1
## Verify connectivity is restored
docker exec container1 ping -c 2 container2
이제 ping 이 다시 작동해야 하며, 이름 확인이 작동하려면 컨테이너가 동일한 네트워크에 있어야 함을 보여줍니다.
문제 해결 체크리스트
컨테이너 연결 문제에 직면했을 때 다음 체크리스트를 따르십시오.
- 컨테이너가 실행 중인지 확인:
docker ps
- 동일한 네트워크에 있는지 확인:
docker network inspect <network>
- IP 주소가 할당되었는지 확인:
docker inspect <container>
- 기본 연결 테스트 (ping):
docker exec <container> ping <target>
- 애플리케이션이 수신 대기 중인지 확인:
docker exec <container> netstat -tuln
- DNS 확인이 작동하는지 확인:
docker exec <container> nslookup <target>
- 방화벽 문제 확인:
docker exec <container> iptables -L
- 컨테이너 로그 확인:
docker logs <container>
이 체계적인 접근 방식을 사용하면 대부분의 컨테이너 연결 문제를 식별하고 해결하는 데 도움이 됩니다.