본문 바로가기
Come on IT/DevOps

docker network 오류 시 확인 (feat. host)

by JONGSKY 2024. 8. 30.
728x90
SMALL

1. 작성하게 된 계기

 

docker를 사용하다보면

네트워크 오류가 발생해서 동작이 안되거나

파일 경로 문제가 있어 오류를 부딫친 경험이 꼭 있다.

 

그래서 이번 기회에 network 오류에 대해서 정리해보고자 한다.

 

2. Docker 네트워크 오류: 원인과 해결 방법

 

1. 기본 네트워크 모드: 브리지 네트워크 (bridge)

 

Docker는 기본적으로 컨테이너를 bridge 네트워크에 연결합니다.
이 모드는 컨테이너 간의 통신을 가능하게 하며, 호스트와 컨테이너 간의 통신도 -p 옵션을 통해 가능합니다.
그러나 브리지 네트워크에서도 몇 가지 문제가 발생할 수 있습니다.


문제: 컨테이너 간 통신 불가

컨테이너 간 통신이 필요할 때, 컨테이너가 같은 브리지 네트워크에 연결되어 있지 않으면 통신이 불가능합니다.

해결 방법:

 

  • 컨테이너들이 동일한 브리지 네트워크에 연결되어 있는지 확인합니다.
  • 특정 네트워크에 연결하려면 다음과 같이 명령어를 사용합니다: 

 

docker network connect my_bridge_network my_container
  • docker-compose를 사용한다면, docker-compose.yml 파일에서 네트워크를 명시적으로 정의해 줍니다:
networks:
  my_bridge_network:
services:
  app:
    networks:
      - my_bridge_network

 

 

2. 호스트 네트워크 모드: --network="host"

 

호스트 네트워크 모드는 성능을 최적화하기 위해 사용되지만, 특정 환경에서는 예상치 못한 오류를 발생시킬 수 있습니다.

 

문제: 포트 충돌

호스트 네트워크 모드를 사용할 때, 컨테이너가 호스트의 네트워크 인터페이스를 직접 사용하므로, 동일한 포트를 사용하는 서비스와 충돌이 발생할 수 있습니다.

 

해결 방법:

 

  • 사용 중인 포트를 확인하고, 충돌이 없는 포트를 사용하도록 설정합니다.
  • 가능하면 호스트 네트워크 모드 대신 브리지 네트워크를 사용하여 격리를 유지하는 것이 좋습니다.
  • 예를 들어, 호스트 네트워크 모드를 사용하지 않고 컨테이너의 8080번 포트를 호스트의 8080번 포트에 매핑하는 방법:

 

docker run -d -p 8080:8080 myapp:latest

 

 

3. 사용자 정의 네트워크

 

Docker는 브리지 네트워크 외에도 다양한 사용자 정의 네트워크를 제공합니다. 이러한 네트워크를 잘못 구성하면 예상치 못한 네트워크 오류가 발생할 수 있습니다.

문제: 네트워크 분리로 인한 접근 불가

여러 네트워크를 사용하는 경우, 네트워크 간에 분리가 되어 있어 컨테이너가 서로를 인식하지 못할 수 있습니다.

해결 방법:

  • 네트워크가 격리되어 있는 경우, 컨테이너가 같은 네트워크에 속해 있는지 확인합니다.
  • 필요한 경우, 컨테이너를 다중 네트워크에 연결합니다:
services:
  web:
    networks:
      - front-end
      - back-end
  db:
    networks:
      - back-end

 

4. DNS 문제

Docker는 자체적으로 DNS 서버를 설정하여 컨테이너 간의 이름 해석을 돕습니다.
하지만 가끔 DNS 문제로 인해 컨테이너 간의 통신이 실패할 수 있습니다.

문제: 컨테이너 이름 해석 실패

컨테이너 이름을 사용하여 다른 컨테이너에 접근하려 할 때, DNS 설정이 잘못되면 이름 해석이 실패할 수 있습니다.

 

해결 방법:

  • 컨테이너가 올바른 네트워크에 연결되어 있는지 확인합니다.
  • --network-alias 옵션을 사용해 컨테이너에 별칭을 부여하여 이름 해석이 가능하도록 설정할 수 있습니다:
docker run --network my_network --network-alias my_alias myapp:latest

 

 

5. 방화벽 및 보안 그룹

호스트에서 실행 중인 방화벽이나 클라우드 제공자의 보안 그룹 설정이 Docker 네트워크 통신을 방해할 수 있습니다.

 

문제: 외부 접근 차단

호스트의 방화벽이나 보안 그룹 설정이 엄격하여 컨테이너가 외부 네트워크와 통신하지 못할 수 있습니다.


해결 방법:

  • 호스트의 방화벽 설정을 검토하고, 필요한 포트가 열려 있는지 확인합니다.
  • 클라우드 환경에서는 보안 그룹 설정을 통해 필요한 인바운드 및 아웃바운드 트래픽을 허용합니다.

 

6. 결론

 

Docker 네트워크 오류는 다양한 원인에 의해 발생할 수 있으며,

이를 해결하기 위해서는 네트워크 구조에 대한 충분한 이해와 꼼꼼한 설정이 필요합니다.

 

네트워크 설정에서 발생할 수 있는 대표적인 문제들을 미리 인지하고,

문제 발생 시 적절히 대응할 수 있는 방법을 알고 있다면,

Docker 환경에서 더 안정적으로 애플리케이션을 운영할 수 있을 것입니다.

 

이 글이 Docker 네트워크 문제로 고민하고 있는 분들에게 작은 도움이 되었기를 바랍니다.

728x90
LIST