かんがるーさんの日記

最近自分が興味をもったものを調べた時の手順等を書いています。今は Spring Boot をいじっています。

Spring Boot 1.5.x の Web アプリを 2.0.x へバージョンアップする ( その35 )( Docker で起動しているサーバの TimeZone を Asia/Tokyo に変更する )

概要

記事一覧はこちらです。

Spring Boot 1.5.x の Web アプリを 2.0.x へバージョンアップする ( その34 )( Docker で複数の Tomcat を起動して動作確認する ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。
    • 前回の記事で jar ファイル起動用コンテナを生成する Dockerfile に ENV TZ="Asia/Tokyo" を定義したのですが、これは Web アプリケーションを起動後にログを見たら日時が日本時間になっていないことに気づいたからです。
    • PostgreSQL のコンテナとかはおそらく日本時間になっていなんだろうな。。。と思ったので、確認して必要があれば変更します。

参照したサイト・書籍

目次

  1. 日本時間になっていないサーバを洗い出す
  2. 環境変数 TZ=Asia/Tokyo を設定してみる
  3. docker image を作成して rabbitmq1~3 に環境変数 TZ=Asia/Tokyo の設定が反映されるようにする

手順

日本時間になっていないサーバを洗い出す

docker-compose up -d コマンドを実行してから各サーバのログ等を見たところ、以下のサーバが日本時間になっていませんでした。結局全てのサーバでしたが。。。

  • docker logs コマンドで出力されるログを見て分かったもの
    • prometheus
    • grafana
    • redis-cluster-1~6
    • redis_exporter
    • rabbitmq1~3
    • rabbitmq_exporter
    • postgresql
    • pgadmin4
    • postgres_exporter
    • mail-server
  • ログが出力されていなかったので docker exec <コンテナ名> date コマンドを実行して分かったもの
    • haproxy
    • haproxy-rsyslog
    • rainloop
  • 実行完了していて分からなかったもの
    • redis-cluster-make
    • flyway

この状態で pgadmin4 から select now() を実行するとログと同じく日本時間ではありませんでした。

環境変数 TZ=Asia/Tokyo を設定してみる

docker-compose.yml の全てのコンテナに以下の設定を追加してみます。

    environment:
      - TZ=Asia/Tokyo

コンテナを起動し直して確認してみると全てのコンテナが日本時間にはなりませんでした。以下の結果です。

  • ログあるいは date コマンドの日時が変わらなかったもの
    • prometheus
    • redis_exporter
    • rabbitmq1~3
    • rabbitmq_exporter
    • pgadmin4
    • postgres_exporter
    • rainloop
  • ログあるいは date コマンドの日時が日本時間に変わったもの
    • grafana
    • redis-cluster-1~6
    • postgresql
    • mail-server
    • haproxy
    • haproxy-rsyslog

今は何がなんでも設定する必要はないので、日本時間に変わらなかったものについては rabbitmq1~3 以外は TZ=Asia/Tokyo の設定をコメントアウトすることにします。rabbitmq1~3 は Dockerfile を作成して TZ=Asia/Tokyo が反映されるイメージを作成してみます。

docker image を作成して rabbitmq1~3 に環境変数 TZ=Asia/Tokyo の設定が反映されるようにする

docker/rabbitmq/Dockerfile を新規作成し、以下の内容を記述します。

ARG RABBITMQ_VERSION
FROM rabbitmq:${RABBITMQ_VERSION}-alpine
RUN apk add --no-cache tzdata

docker-compose.yml を以下のように変更します。

  rabbitmq1:
    build:
      context: ./docker/rabbitmq
      args:
        - RABBITMQ_VERSION=${RABBITMQ_VERSION}
    image: rabbitmq:${RABBITMQ_VERSION}-alpine-custom
    container_name: rabbitmq1
    hostname: rabbitmq1
    environment:
      - TZ=Asia/Tokyo
      - RABBITMQ_ERLANG_COOKIE
      - RABBITMQ_DEFAULT_USER
      - RABBITMQ_DEFAULT_PASS
      - RABBITMQ_DEFAULT_VHOST
  rabbitmq2:
    image: rabbitmq:${RABBITMQ_VERSION}-alpine-custom
    container_name: rabbitmq2
    hostname: rabbitmq2
    environment:
      - TZ=Asia/Tokyo
      - RABBITMQ_ERLANG_COOKIE
    volumes:
      - ./docker/rabbitmq/cluster-entrypoint.sh:/usr/local/bin/cluster-entrypoint.sh
    entrypoint: /bin/sh -c /usr/local/bin/cluster-entrypoint.sh
    depends_on:
      - rabbitmq1
  rabbitmq3:
    image: rabbitmq:${RABBITMQ_VERSION}-alpine-custom
    container_name: rabbitmq3
    hostname: rabbitmq3
    environment:
      - TZ=Asia/Tokyo
      - RABBITMQ_ERLANG_COOKIE
    volumes:
      - ./docker/rabbitmq/cluster-entrypoint.sh:/usr/local/bin/cluster-entrypoint.sh
    entrypoint: /usr/local/bin/cluster-entrypoint.sh
    depends_on:
      - rabbitmq1
  • rabbitmq1 に build の記述を追加し、image に記述するイメージ名の末尾に -custom を追加します。
  • rabbitmq2, 3 は image に記述するイメージ名の末尾に -custom を追加します。これで rabbitmq1 で生成したイメージが使用されます。

docker-compose up -d コマンドで起動します。

f:id:ksby:20190122001633p:plain

ログに出力される日時が日本時間になっていることが確認できます。(1/22 00:16に起動しています)。

f:id:ksby:20190122001906p:plain

rabbitmq:3.7.8-management-alpine と rabbitmq:3.7.8-management-alpine-custom のサイズを docker image ls rabbitmq コマンドで確認してみると 1.7MB の差異でした。

f:id:ksby:20190122002530p:plain

履歴

2019/01/22
初版発行。