deezus blog

.Net Core、Typescriptを中心に技術的ノウハウを公開しています

DockerのMySQL、PostgreSQL、SQLServerにタイムゾーンを設定する方法

デフォルトはUTC

特に指定しない場合、UTCとなります
日時を保存するカラムにNOW()やGETDATE()を使用する場合、日本時間から9時間ずれることになります

MySQLとSQLServerの場合

MySQLとSQLServerの場合、コンテナのタイムゾーンと同じになります
コンテナのタイムゾーンを変更するには環境変数TZ=Asia/Tokyoを指定します
Docker-compose.ymlの場合、以下のようになります

version: '2'
  mysql:
    image: mysql
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: 1
      MYSQL_DATABASE: database
      MYSQL_USER: user
      MYSQL_PASSWORD: password
      TZ: Asia/Tokyo
  mssql:
    image: microsoft/mssql-server-linux
    environment:
      ACCEPT_EULA: Y
      SA_PASSWORD: "!Passw0rd"
      TZ: Asia/Tokyo

PostgreSQLの場合

PostgreSQLの場合はTZ=Asia/Japanではタイムゾーンが変更されません
PGTZを追加する必要があります
※特に別途コンテナで何もしないのであればTZは必要ありません

version: '2'
services:
  postgres:
    image: postgres
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: database
      PGTZ: Asia/Tokyo