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 のコンテナとかはおそらく日本時間になっていなんだろうな。。。と思ったので、確認して必要があれば変更します。
- 前回の記事で jar ファイル起動用コンテナを生成する Dockerfile に
参照したサイト・書籍
目次
- 日本時間になっていないサーバを洗い出す
- 環境変数 TZ=Asia/Tokyo を設定してみる
- 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
コマンドで起動します。
ログに出力される日時が日本時間になっていることが確認できます。(1/22 00:16に起動しています)。
rabbitmq:3.7.8-management-alpine と rabbitmq:3.7.8-management-alpine-custom のサイズを docker image ls rabbitmq
コマンドで確認してみると 1.7MB の差異でした。
履歴
2019/01/22
初版発行。