도커 컨테이너 기동시 리눅스 타임존 설정 및 postgres timezone 설정




postgres pgvector 도커 기동시 한글 설정

db-dompose.yaml

version: '3.8'

services:
  db:
    image: ankane/pgvector:latest
 #   build:
 #     context: .                    # <-- Dockerfile이 있는 컨텍스트 경로 (현재 디렉토리)
  #    dockerfile: DockerfilePgvector # <-- Dockerfile의 이름 지정
    environment:
      POSTGRES_DB: vectordb
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      TZ: Asia/Seoul             # <-- 컨테이너 시스템 타임존 설정
    volumes:
      - pgdata2:/var/lib/postgresql/data
    ports:
      - "5433:5432"
    # command: >
    #   postgres
    #   -c "TimeZone=Asia/Seoul"
    #   -c "log_timezone=Asia/Seoul"
volumes:
  pgdata2:

타임존 설정:
  • TZ: Asia/Seoul: 컨테이너의 시스템 레벨 타임존을 Asia/Seoul로 설정합니다
  • command: postgres -c "TimeZone=Asia/Seoul" -c "log_timezone=Asia/Seoul": PostgreSQL 서버 내부에서 사용하는 TimeZone 설정을 직접 Asia/Seoul로 오버라이드합니다. 이는 TZ 환경 변수와 별개로 PostgreSQL 자체의 설정을 변경하는 것이라 더 확실합니다.

LC_ALL 환경 변수는 리눅스 및 유닉스 계열 시스템에서 모든 LC_로 시작하는 로케일 관련 환경 변수들을 한꺼번에 재정의하는 데 사용되는 특별한 환경 변수입니다.

LC_ 변수들이란?

리눅스 시스템은 사용자의 언어, 날짜/시간 형식, 통화 형식, 숫자 형식, 정렬 순서 등을 정의하기 위해 여러 LC_ 환경 변수를 사용합니다. 주요 LC_ 변수들은 다음과 같습니다:

  • LC_CTYPE: 문자 분류 및 변환 (예: 대소문자 변환, 문자열 인코딩)
  • LC_NUMERIC: 숫자 형식 (예: 소수점 구분 기호, 천 단위 구분 기호)
  • LC_TIME: 시간 및 날짜 형식 (예: 날짜 표시 순서, 요일 이름)
  • LC_COLLATE: 문자열 정렬 순서
  • LC_MONETARY: 통화 형식
  • LC_MESSAGES: 프로그램 메시지(오류 메시지, 프롬프트 등)의 언어
  • LC_PAPER: 종이 크기 형식
  • LC_NAME: 이름 형식
  • LC_ADDRESS: 주소 형식
  • LC_TELEPHONE: 전화번호 형식
  • LC_MEASUREMENT: 측정 단위
  • LC_IDENTIFICATION: 로케일 관련 일반 정보

그리고 가장 기본적인 LANG 변수도 있습니다.

  • LANG: LC_ 변수들이 개별적으로 설정되지 않았을 때, 모든 LC_ 변수의 기본값을 설정합니다.

LC_ALL의 역할

LC_ALL은 이 모든 LC_ 변수들보다 가장 높은 우선순위를 가집니다.

  • 재정의 기능: 만약 LC_ALL이 설정되면, LANG과 모든 개별 LC_CTYPE, LC_TIME 등등의 모든 LC_ 변수 설정을 무시하고 LC_ALL의 값으로 강제로 설정합니다.
  • 디버깅/강제 설정: 특정 환경에서 로케일 관련 문제를 진단하거나, 모든 로케일 설정을 일관되게 강제하고 싶을 때 유용하게 사용될 수 있습니다.

예시

  1. LANG=en_US.utf8만 설정:

    • LC_CTYPE, LC_TIME 등 개별 LC_ 변수가 설정되어 있지 않으면 모두 en_US.utf8를 따릅니다.
  2. LANG=en_US.utf8이고 LC_TIME=ko_KR.utf8인 경우:

    • 대부분은 영어 로케일을 따르지만, 시간 표시는 한국어 로케일을 따릅니다.
  3. LC_ALL=ko_KR.utf8인 경우 (다른 변수들이 어떻게 설정되어 있든):

    • LANG, LC_CTYPE, LC_NUMERIC, LC_TIME모든 로케일 관련 설정이 강제로 ko_KR.utf8로 설정됩니다.

컨테이너 환경에서의 사용

Docker 컨테이너와 같이 격리된 환경에서 locale을 확실하게 설정하고 싶을 때 LC_ALL을 사용하는 경우가 있습니다. LANG만으로는 충분하지 않거나, 특정 LC_ 변수가 예기치 않게 다른 값으로 설정되어 문제를 일으킬 수 있는 경우 LC_ALL을 사용해 모든 것을 한 번에 ko_KR.utf8로 통일할 수 있습니다.

다만, 대부분의 경우 LANG=ko_KR.utf8만으로도 충분하며, TZ 환경 변수로 타임존을 별도로 설정하는 것이 일반적입니다. LC_ALL은 때때로 너무 강제적이라서 예상치 못한 부작용을 일으킬 수도 있으므로, 필요할 때만 사용하는 것이 좋습니다.

결론적으로, LC_ALL은 "모든 로케일 설정을 한 번에, 그리고 가장 높은 우선순위로 지정하는 마스터 스위치"라고 이해하시면 됩니다.


도커 컨테이너 기동



# 1. 기존 컨테이너 중지 및 제거
```
docker compose -f db-compose.yaml down

docker compose -f db-compose.yaml down --volumes  ## 로컬 저장소 파일까지 삭제 완전 초기화
```

# 2. 새로운 이미지를 빌드하고 컨테이너 기동
# --build 옵션은 Dockerfile을 기반으로 이미지를 다시 빌드하도록 강제합니다.
```
docker compose -f db-compose.yaml up -d

docker compose -f db-compose.yaml up -d --build
```

## 도커 파일 접속후 postgres 계정에서 timezone 설정
```
su - postgres
echo 'export TZ="Asia/Seoul"' >> .bash_profile
source .bash_profile
```



db 접속 타임존 확인


postgres 계정에서 확인

root@2b4d1a6fe729:/# su - postgres
postgres@2b4d1a6fe729:~$ psql
psql (15.4 (Debian 15.4-2.pgdg120+1))
Type "help" for help.

postgres=# select now();
              now
-------------------------------
 2025-06-13 15:28:21.941996+09
(1 row)

postgres=# show timezone;
  TimeZone  
------------
 Asia/Seoul
(1 row)

postgres=# 










댓글

이 블로그의 인기 게시물

아파치 보안관련 기본설정

티베로 이관 작업 절차

윈도우 네트워크 리소스 사용권한 오류