環境構築

【Docker】postgresqlでロケールを日本に設定したコンテナを準備する

今回はpostgresqlをdocker環境で使用する時に、ロケールを予め日本に設定する方法をまとめました。

Dockerfile

こちらが日本語化を行う場合のDockerfileです。

FROM postgres:14.3

ENV DB_LANG=ja_JP
ENV LANG $DB_LANG.utf8
RUN localedef -i $DB_LANG -c -f UTF-8 -A /usr/share/locale/locale.alias $DB_LANG.UTF-8

localedefコマンドで日本の地域設定を行います。

Dockerfile側はこれで終了です。

docker-compose.yml

簡単に起動させるためにdocker-compose.ymlを準備します。

サンプルは以下のようになります。

services:
  db_sample:
    container_name: db_sample
    hostname: db_sample
    image: db_sample
    build: 
      context: .
      dockerfile: ./Dockerfile
    ports:
      [
        "5432:5432"
      ]
    environment:
      POSTGRES_PASSWORD: #任意のパスワードを記入
      TZ: "Asia/Tokyo"

設定項目は必要に応じて修正していただければと思います。

また、POSTGRES_PASSWORDには任意のパスワードを記入してください。

テスト環境ではない場合はPOSTGRES_PASSWORDを別ファイルから読み出す方式にしたほうが良いです。

起動してみる

ディレクトリ構成は以下の通り

$ tree
.
├── docker-compose.yml
└── Dockerfile

以下のコマンドを叩きます。

docker compose up -d

コンテナが立ち上がったらコンテナ内にアタッチして確認してみます。

root@db_sample:/# psql -U postgres
psql (14.3 (Debian 14.3-1.pgdg110+1))
"help"でヘルプを表示します。

postgres=# SELECT name, setting, context FROM pg_settings WHERE name LIKE 'lc%';
    name     |  setting   |  context  
-------------+------------+-----------
 lc_collate  | ja_JP.utf8 | internal
 lc_ctype    | ja_JP.utf8 | internal
 lc_messages | ja_JP.utf8 | superuser
 lc_monetary | ja_JP.utf8 | user
 lc_numeric  | ja_JP.utf8 | user
 lc_time     | ja_JP.utf8 | user
(6 行)

ロケールがja_JP.utf8になっていればOKです。