Docker Compose 컨테이너 네이밍 규칙과 네트워크 주소 풀 문제 해결

SB신범
3분 읽기
조회수 로딩 중...

Docker Compose 컨테이너 네이밍 규칙과 네트워크 주소 풀 문제 해결

Docker Compose를 사용하여 다중 컨테이너 애플리케이션을 관리할 때, 컨테이너 이름 지정 방식과 네트워크 구성에 대한 이해는 매우 중요합니다. 이 글에서는 Docker Compose의 기본 네이밍 규칙과 흔히 발생하는 네트워크 주소 풀 고갈 문제의 해결 방법을 알아보겠습니다.

목차

  1. Docker Compose 컨테이너 네이밍 규칙
  2. 네트워크 주소 풀 고갈 오류
  3. 문제 해결 방법
  4. Docker 네트워크 설정 최적화
  5. 요약

Docker Compose 컨테이너 네이밍 규칙

Docker Compose는 여러 컨테이너를 정의하고 실행하기 위한 도구로, 각 컨테이너에 일관된 이름을 자동으로 부여합니다. 이 네이밍 규칙을 이해하면 로그 확인이나 컨테이너 관리가 훨씬 수월해집니다.

기본 네이밍 패턴

Docker Compose에서 컨테이너 이름은 기본적으로 다음 규칙을 따릅니다:

프로젝트이름_서비스이름_번호

각 구성 요소의 의미는 다음과 같습니다:

  1. 프로젝트 이름: docker-compose.yml 파일의 name: 속성에서 정의한 값이나, 정의되지 않은 경우 디렉토리 이름
  2. 서비스 이름: Compose 파일에서 정의한 각 서비스의 키 이름
  3. 번호: 동일한 서비스의 여러 인스턴스를 실행할 경우 1부터 시작하여 증가

실제 예시

예를 들어, supa-dsket-dev라는 프로젝트 이름을 가진 Docker Compose 구성에서는 다음과 같은 컨테이너 이름이 생성됩니다:

  • supa-dsket-dev_studio_1
  • supa-dsket-dev_kong_1
  • supa-dsket-dev_analytics_1 (의존성에 포함된 서비스)
  • supa-dsket-dev_meta_1 (의존성에 포함된 서비스)

이러한 네이밍 패턴은 Docker Compose의 기본 동작이며, container_name: 속성을 통해 명시적으로 지정하지 않은 경우에 적용됩니다.

네트워크 주소 풀 고갈 오류

Docker Compose로 환경을 구성하다 보면 다음과 같은 오류 메시지를 만날 수 있습니다:

failed to create network supabase-d-sket-dev_default: Error response from daemon: all predefined address pools have been fully subnetted

이 오류는 Docker가 새로운 네트워크를 생성하기 위한 IP 주소 풀이 고갈되었다는 의미입니다.

오류 발생 예시

다음은 실제 오류 로그의 예시입니다:

data-sketchers@datasketchers-Server ~/docker/supabase-d-sket-dev docker compose up WARN[0000] The "GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID" variable is not set. Defaulting to a blank string. WARN[0000] The "GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI" variable is not set. Defaulting to a blank string. WARN[0000] The "GOTRUE_EXTERNAL_GOOGLE_ENABLED" variable is not set. Defaulting to a blank string. WARN[0000] The "GOTRUE_EXTERNAL_GOOGLE_SECRET" variable is not set. Defaulting to a blank string. [+] Running 1/1 ✘ Network supabase-d-sket-dev_default Error 0.0s failed to create network supabase-d-sket-dev_default: Error response from daemon: all predefined address pools have been fully subnetted

참고: 로그 상단의 GOTRUE 관련 경고는 Google 인증 설정이 제공되지 않았다는 의미이지만, 네트워크 오류와는 관련이 없는 단순 경고입니다.

오류의 원인

이 문제가 발생하는 주요 원인은 다음과 같습니다:

  1. Docker는 컨테이너 네트워크를 위해 내부적으로 IP 주소 풀을 관리합니다.
  2. 여러 Docker 네트워크를 생성하고 삭제하는 과정에서, 특히 네트워크를 제대로 정리하지 않으면 이러한 주소 풀이 고갈될 수 있습니다.
  3. Docker는 기본적으로 172.17.0.0/16, 172.18.0.0/16 등의 주소 범위를 사용하는데, 이 범위가 모두 할당되면 새로운 네트워크를 생성할 수 없게 됩니다.

문제 해결 방법

네트워크 주소 풀 고갈 문제를 해결하는 여러 방법을 살펴보겠습니다.

1. 사용하지 않는 Docker 네트워크 제거

가장 간단한 해결 방법은 사용하지 않는 Docker 네트워크를 정리하는 것입니다:

bash
1docker network prune

이 명령은 현재 사용되지 않는 모든 네트워크를 제거합니다.

2. Docker 시스템 정리

더 광범위한 정리가 필요하다면, 다음 명령을 사용하여 모든 미사용 Docker 리소스(이미지, 컨테이너, 볼륨, 네트워크)를 제거할 수 있습니다:

bash
1# 주의: 실행 중인 컨테이너는 영향받지 않지만, 중지된 컨테이너와 미사용 이미지는 삭제됩니다 2docker system prune -a

3. Docker 데몬 재시작

여전히 문제가 해결되지 않는다면, Docker 데몬을 재시작해보세요:

bash
1sudo systemctl restart docker

4. Docker 주소 풀 설정 변경

위의 방법으로도 문제가 해결되지 않는다면, Docker의 기본 주소 풀 설정을 직접 변경할 수 있습니다. /etc/docker/daemon.json 파일을 생성하거나 편집하여 다음과 같이 설정합니다:

json
1{ 2 "default-address-pools": [ 3 {"base": "172.30.0.0/16", "size": 24}, 4 {"base": "172.31.0.0/16", "size": 24} 5 ] 6}

이 설정은 Docker에게 172.30.0.0/16과 172.31.0.0/16 범위를 사용하도록 지시하며, 각 네트워크에 /24 서브넷(256개 IP 주소)을 할당합니다.

설정을 변경한 후에는 Docker 데몬을 재시작해야 합니다:

bash
1sudo systemctl restart docker

Docker 네트워크 설정 최적화

Docker를 프로덕션 환경에서 장기간 사용할 계획이라면, 다음 추가 설정을 고려해보세요:

1. 더 큰 주소 범위 사용

대규모 환경에서는 더 큰 주소 범위를 사용할 수 있습니다:

json
1{ 2 "default-address-pools": [ 3 {"base": "172.20.0.0/14", "size": 24}, 4 {"base": "192.168.0.0/16", "size": 24} 5 ] 6}

2. 정기적인 네트워크 정리 스케줄링

cron 작업으로 정기적인 네트워크 정리를 설정하는 것도 좋은 방법입니다:

bash
1# 매주 일요일 새벽 2시에 미사용 네트워크 정리 20 2 * * 0 docker network prune -f

3. 컨테이너에 고정 IP 할당

중요한 서비스에는 고정 IP를 할당하여 관리를 용이하게 할 수 있습니다:

yaml
1services: 2 database: 3 # ... 다른 설정들 ... 4 networks: 5 app_net: 6 ipv4_address: 172.20.0.2 7 8networks: 9 app_net: 10 driver: bridge 11 ipam: 12 config: 13 - subnet: 172.20.0.0/24

요약

Docker Compose를 사용할 때 컨테이너는 프로젝트이름_서비스이름_번호 형식으로 자동 명명됩니다. 네트워크 관련 문제, 특히 주소 풀 고갈 오류가 발생할 경우, 미사용 네트워크 정리, 시스템 프루닝, Docker 데몬 재시작, 또는 주소 풀 설정 변경을 통해 해결할 수 있습니다.

네트워크 구성을 사전에 최적화하고 정기적으로 미사용 리소스를 정리하면 이러한 문제를 예방할 수 있습니다. Docker의 네트워크 관리 방식을 이해하고 적절하게 설정하는 것이 안정적인 컨테이너 환경 운영의 핵심입니다.