12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PostgreSQL を Docker 環境で日本語ロケールで動作させる

Posted at

Docker 環境で、PostgreSQL を日本語ロケールで動作させたかったので調べてみました。
今回は、Dockerfile で、PostgreSQLを作成し、 docker-compose.yml ファイルで使用するロケールを指定します。

注意事項

ここで紹介するのは、いったん作成したPostgreSQLデータベースのロケールを変更する方法ではありません。PostgreSQL のDocker イメージ作成時に日本語ロケールで作成して実行する方法です。

Dockerfile を作成する

PostgreSQL の Dockerfile を作成します。
今回は、公式イメージを使います。 素直に公式サイトの説明に従います。
ただし、使用する言語は、 docker-compose.yml ファイル側で指定したいので、 ARG を使います。
ここでは、 docker-compose.yml 側で、言語が指定されなかった場合のデフォルト値として、 en_US を指定するため、ARG DB_LANG=en_US とします。

dockerfiles/postgresql/Dockerfile
FROM postgres:12.1
ARG DB_LANG=en_US
RUN localedef -i $DB_LANG -c -f UTF-8 -A /usr/share/locale/locale.alias $DB_LANG.UTF-8
ENV LANG $DB_LANG.utf8

docker-compose.yml を作成する

docker-compose.yml ファイルを作成します。

PostgreSQL のイメージ作成 ( build ) 時に、言語を引き渡せるように args を使います。

docker-compose.yml
version: '3'

services:
  db:
    build:
      context: .
      dockerfile: ./dockerfiles/postgresql/Dockerfile
      args:
        - DB_LANG=ja_JP
    volumes:
      - pgsqldb:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER
      - POSTGRES_PASSWORD

volumes:
  pgsqldb:
    driver: local

立ち上げて確認する

ビルドして実行します。

$ env POSTGRES_USER=xxx POSTGRES_PASSWORD=yyy docker-compose up -d`

実際に確認してみましょう

$ docker-compose exec db bash
# psql non_exist_db -U postgres
psql: エラー: サーバに接続できませんでした: FATAL:  データベース"non_exist_db"は存在しません

エラーメッセージが日本語になりました。

DB_LANG を指定しなかった場合

docker-compose.ymlargs を指定しなかった場合は、 en_US になります。

参考情報

12
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?