My開発メモ

Dockerコンテナのタイムゾーンを設定する

DockerコンテナのタイムゾーンをJSTにするにはどうするかという話。

Dockerコンテナのタイムゾーンが9時間遅れてしまっていた。

root@d38ce651a96c:/etc# date
Sat Apr 18 05:18:33 Japan 2020

どういう設定になっていたのかというと、これ。

docker-compose.yml

...
services:
  db:
    volumes:
      - /etc/localtime:/etc/localtime:ro
    environment:
      TZ: Asia/Tokyo

  apache2:
    volumes:
      - /etc/localtime:/etc/localtime:ro
    environment:
      TZ: Japan

上の記述はいずれも一部分だけを抜き出したものである。

ローカルの /etc/localtime をそのまま Dockerコンテナにもってきているだけである。

でも、これが効いていない。

解決法

Dockerコンテナ側で tzdata をインストールする。


(ubuntu)

RUN apt-get install -y tzdata

あるいは (centos)

RUN yum -y install tzdata

(2022.03.22 追記)


あるいは (Alpine)

RUN apk add tzdata

(2022.05.07 追記)


docker-compose.ymlは以下のようにする。

docker-compose.yml

...
services:
  db:
    environment:
      TZ: Asia/Tokyo

  apache2:
    environment:
      TZ: Japan

つまり、volumes で /etc/localtime を読み込んでいる部分を削除する。

これだけでいける。

訂正 (2022.03.24)

上記、docker-compose.yml の記述のところ

TZ: Japan

ではなくて、

TZ: Asia/Tokyo

である。

参考

カテゴリー: Docker, memo

タグ: Docker, timezone, tz-data

カウント: 283