[Docker compose - Postgres 설정] 부팅 이슈 해결하기 (Internship : Infra)

2026. 1. 20. 20:15·DevOps/Docker

환경 일관성과 데이터 관리의 용이성 때문에 온프레미스로 구현되고 있는 서비스의 서버에 database 를 Docker 를 이용하여 배포하고 운영하고 있습니다.

 

해당 Postgres 의 컴포즈 파일을 설정하다가,  계속적인 부팅 이슈가 발생하길래 그것을 수정하여 개선해보려 합니다. 

  postgres:
    image: ${POSTGRES_IMAGE:-postgres:15}
    container_name: ${POSTGRES_SERVICE_NAME:-postgres}
    env_file: .env.postgres
    ports:
      - "${POSTGRES_PORT:-5432}:5432"
    volumes:
      - ${ROOT_HOST}/postgres-data:/var/lib/postgresql/data
    command: >
      bash -c "
      apt-get update &&
      apt-get install -y locales tzdata &&
      sed -i 's/# ko_KR.UTF-8 UTF-8/ko_KR.UTF-8 UTF-8/' /etc/locale.gen &&
      locale-gen &&
      dpkg-reconfigure --frontend=noninteractive tzdata &&
      exec docker-entrypoint.sh postgres
      "
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - ${DOCKER_NETWORK_NAME}
    restart: unless-stopped
  postgres-backup:
    image: ${POSTGRES_IMAGE:-postgres:15}
    container_name: ${POSTGRES_BACKUP_SERVICE_NAME:-postgres-backup}
    restart: "no"
    depends_on:
      postgres:
        condition: service_healthy
    env_file: .env.postgres
    environment:
      PGPASSWORD: password
    volumes:
      - /home/{name}/postgres-backups:/backups
      - ./scripts:/scripts:ro
    networks:
      - ${DOCKER_NETWORK_NAME}
    profiles:
      - backup

 

기본적으로 설정한 것들은 다 설정해뒀다 생각을 하고 있었는데, 

막상 확인을 해보니 문제가 많더라구요 

 

 

1) 컨테이너 시작할 때마다  apt-get install 

 

도커는 이미지 빌드 시점에 고정을 하고, 런타임에 그 이미지를 실행하는 모델입니다.

하지만, 해당 도커 컴포즈 설정 파일은 

  • 재시작이 느려짐: DB는 재시작이 빨라야 하는데, 매번 패키지 설치로 몇 분씩 걸릴 수 있음
  • 외부 네트워크 의존: apt repository가 일시 장애나 DNS 이슈 나면 → DB 컨테이너가 부팅 실패
  • 환경이 매번 달라질 수 있음: apt로 “오늘 받아오는 패키지 버전”이 바뀌면,
  • 같은 postgres:15 이미지라도 컨테이너 내부 상태가 달라짐 → 재현성 깨짐
  • 보안 업데이트 통제 불가: 런타임에 즉석 업데이트되니, 어떤 패키지가 깔렸는지 추적/검증이 어려움

의 문제를 야기할 수 있겠더라구요.

command 에 설정 되어있는 기본적인 값들 때문에... 

 

 

 

2)  dpkg-reconfigure tzdata  같은 “인터랙티브/상태성” 작업은 컨테이너에 안 맞음

 

컨테이너는 기본적으로

  • “짧고 빠른 프로세스 실행”
  • “환경변수/파일로 설정 주입” 에 최적화되어 있음.

dpkg-reconfigure는 원래 시스템(호스트 OS)에서 돌리는 전제라,

 

  • 파일 시스템에 설정을 남기고
  • 패키지 상태 DB를 바꾸고
  • 때론 interactive prompt를 전제로 함

 

지금은 --frontend=noninteractive로 눌러놨지만, 여전히 컨테이너를 OS처럼 다루는 방식이라 운영에서 리스크가 큽니다.

 

즉, ENV TZ=Asia/Seoul + /etc/localtime 링크 세팅을 이미지 빌드 단계에서 처리해야 된다!

 

 

 

 

3) 런타임 상태가 이미지에 남지 않는다

도커에서 중요한 개념 하나

 

컨테이너는 버리고 이미지는 남긴다

 

지금 구조에서는

  • locales / tzdata 설치
  • locale-gen 실행

이 모든 작업이 컨테이너 실행 중에만 존재 합니다.

 

컨테이너를 지웠다가 다시 띄우면?

→ 또 다시 같은 작업을 반복한다.

이건 “이미지를 쓰는 것”이 아니라 매번 새 서버에 Postgres를 설치하는 것과 다르지 않게 된 것

 

 

4) DB 백업 컨테이너에서도 같은 문제가 반복된다

  • 서버 이미지
  • locales/tzdata 설치
  • 불필요한 구성

 

을 백업 작업 하나 하자고 또 띄우고 있습니다.

 

도커의 장점은 “필요한 것만 가진 최소 컨테이너”인데,

여기서는 그 장점을 전혀 살리지 못하고 있는 거 같습니다.

 

그래서 이제 해당 Postgres 도커 설정을 좀 더 실무에 적합하게 바꾸어 새로 올려보려 합니다.

'DevOps > Docker' 카테고리의 다른 글

[docker-compose]온프렘 도커 배포 실전 삽질기 (네트워크, 쿠키, 헬스체크 해결편)  (0) 2025.12.31
[docker-compose]온프레미스 환경에서 Docker Compose로 서비스 구성하기  (0) 2025.12.31
[Docker] 실행 방법  (0) 2025.12.11
[docker] 개념 정리  (0) 2025.12.10
[BuildX & 서버 이전] FastAPI + PaddleOCR 서버 이전기: "exec format error"와 Docker Buildx 완벽 가이드  (0) 2025.12.07
'DevOps/Docker' 카테고리의 다른 글
  • [docker-compose]온프렘 도커 배포 실전 삽질기 (네트워크, 쿠키, 헬스체크 해결편)
  • [docker-compose]온프레미스 환경에서 Docker Compose로 서비스 구성하기
  • [Docker] 실행 방법
  • [docker] 개념 정리
yeseul-kim01
yeseul-kim01
  • yeseul-kim01
    슬 개발일지
    yeseul-kim01
  • 전체
    오늘
    어제
    • 분류 전체보기 (79)
      • 자격증 (1)
        • 정보보안기사 (0)
      • DevOps (17)
        • Docker (6)
        • Kubernetes (1)
        • GitHub Actions (0)
        • AWS (4)
        • Monitoring (1)
        • Nginx (1)
        • GCP (3)
      • ServerDev (34)
        • SpringBoot (13)
        • DJango (5)
        • FastAPI (14)
        • Next (0)
        • Flask (0)
        • Database (2)
      • Algorithm (2)
        • BFS (0)
        • DFS (1)
        • 다익스트라 (0)
      • CS (8)
      • Data Engineering (1)
      • AI&MLOps (2)
      • Architecture (6)
      • Software Engineering (0)
        • Library Packaging (0)
      • Project (5)
        • docx-generator (0)
        • speak-note (2)
        • ms-serving (1)
        • keyshield (2)
      • ProgrammingLanguages (3)
        • Python (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    FastAPI
    multipartfile
    MLops
    프로젝트기록-speaknote
    NLP부트캠프
    Kubernetes
    비동기처리
    KeyShield
    동시성제어
    멀티모듈
    백엔드
    실무일기-인프라편
    grpc
    프로젝트기록-KeyShield
    아키텍처
    SpringBoot
    rag
    트러블슈팅
    FastAPI - CORS 마스터
    Django
    di
    실무일기-백엔드편
    KServe
    docker
    실시간시스템
    SpeakNote
    depends
    STT
    하이브리드아키텍처
    아키텍처설계
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
yeseul-kim01
[Docker compose - Postgres 설정] 부팅 이슈 해결하기 (Internship : Infra)
상단으로

티스토리툴바