LoginSignup
91
79

More than 3 years have passed since last update.

Dockerコンテナのタイムゾーン変更方法

Last updated at Posted at 2019-07-16

TZ環境変数で変更

$ docker run -it --rm -e TZ=Asia/Tokyo python:3.7.4 bash
root@76b0f97a96ee:/# date
Wed Jul 17 00:03:25 JST 2019

docker-composeの指定方法

version: '3.7'
services:
  mariadb:
    environment:
      TZ: Asia/Tokyo

TZ環境変数で変わらないイメージがある
その時は、etc/localtimeをvolume mountでやると変わった

$ docker run -it --rm -e TZ=Asia/Tokyo verdaccio/verdaccio:4.1.0 sh
~ $ date
Tue Jul 16 15:06:26 UTC 2019

# etc/localtimeをvolume mountだと変わった
$ docker run -it --rm -v /etc/localtime:/etc/localtime:ro verdaccio/verdaccio:4.1.0 sh
~ $ date
Wed Jul 17 00:08:24 JST 2019

etc/localtimeをvolume mountして問題出る場合があるので、
以下のサイトの内容を読んだほうがよい。
Docker で /etc/localtime をホストに volume マウントしてハマった話
Ubuntu 16.04(xenial)のDockerコンテナのタイムゾーンを日本(JST)にする(Dockerfileで)

2019/7/29追記

・コンテナのタイムゾーンは変更しないでそのまま使うほうがよい

・/etc/localtime をホストに volume マウント は、やらないほうがよい

・コンテナのタイムゾーンを変えたい場合、環境変数「TZ」が使えるOSなら、それを使う
・ubuntu:xenial で -e TZ=Asia/Tokyo を付けて docker runしても変わらないという情報あり
Ubuntu 16.04(xenial)のDockerコンテナのタイムゾーンを日本(JST)にする(Dockerfileで)
・Alpine Linuxは、zoneinfo とかはそのままだと用意されていないので、apk で tzdata パッケージをインストールする必要があります。
Alpine Linux でタイムゾーンを変更する
Alpine Linux で timezone を変更する(最新版?)
Docker の Alpine Linux でタイムゾーンを JST にする
DockerのAlpine Linuxでタイムゾーンでハマった

UbuntuのDockerコンテナのタイムゾーン変更・・・2019/11/12追記

ubuntu:bionic(18.04)

Dockerfile
FROM ubuntu:bionic
RUN DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y tzdata
$ docker build . -t ubuntu-bionic
$ docker run -it --rm -e TZ=Asia/Tokyo ubuntu-bionic /bin/bash
$ date

Tue Nov 12 18:02:10 JST 2019

ubuntu:disco(19.04)

Dockerfile
FROM ubuntu:disco
RUN DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y tzdata
$ docker build . -t ubuntu-disco
$ docker run -it --rm -e TZ=Asia/Tokyo ubuntu-disco /bin/bash
$ date

Tue Nov 12 18:24:35 JST 2019

ubuntu:eoan(19.10)

Dockerfile
FROM ubuntu:eoan
RUN DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y tzdata
$ docker build . -t ubuntu-eoan
$ docker run -it --rm -e TZ=Asia/Tokyo ubuntu-eoan /bin/bash
$ date

Tue Nov 12 18:26:59 JST 2019

ubuntu:focal(20.04)

Dockerfile
FROM ubuntu:focal
RUN DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y tzdata
$ docker build . -t ubuntu-focal
$ docker run -it --rm -e TZ=Asia/Tokyo ubuntu-focal /bin/bash
$ date

Tue Nov 12 18:29:48 JST 2019

2019/7/26追記

AWS EC2
CoreOS 2135.5.0
OSのタイムゾーンはデフォルトのUTC

docker-compose.yml
version: "3.7"
services:
  mariadb:
    container_name: mariadb
    image: mariadb:10.3.16
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci --default-time-zone=Asia/Tokyo
    volumes:
      - ./mariadb-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: test
      TZ: Asia/Tokyo
    ports:
      - "3306:3306"
$ docker-compose up -d
$ docker exec -it mariadb bash
$ date

Fri Jul 26 02:24:41 JST 2019

$ mysql -u root -ptest

MariaDB [(none)]> SHOW VARIABLES LIKE '%time_zone%';
+------------------+------------+
| Variable_name    | Value      |
+------------------+------------+
| system_time_zone | JST        |
| time_zone        | Asia/Tokyo |
+------------------+------------+

パターン②

docker-compose.yml
version: "3.7"
services:
  mariadb:
    container_name: mariadb
    image: mariadb:10.3.16
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci --default-time-zone=Asia/Tokyo
    volumes:
      - ./mariadb-data:/var/lib/mysql
      - /etc/localtime:/etc/localtime:ro
    environment:
      MYSQL_ROOT_PASSWORD: test
    ports:
      - "3306:3306"
$ docker-compose up -d
$ docker exec -it mariadb bash
$ date

Thu Jul 25 17:31:18 UTC 2019

$ mysql -u root -ptest

MariaDB [(none)]> SHOW VARIABLES LIKE '%time_zone%';

+------------------+------------+
| Variable_name    | Value      |
+------------------+------------+
| system_time_zone | UTC        |
| time_zone        | Asia/Tokyo |
+------------------+------------+

AWS EC2
Amazon Linux2
OSのタイムゾーンはデフォルトのUTC

パターン①

docker-compose.yml
version: "3.7"
services:
  mariadb:
    container_name: mariadb
    image: mariadb:10.3.16
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci --default-time-zone=Asia/Tokyo
    volumes:
      - ./mariadb-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: test
      TZ: Asia/Tokyo
    ports:
      - "3306:3306"
$ docker-compose up -d
$ docker exec -it mariadb bash
$ date

Fri Jul 26 02:36:25 JST 2019

$ mysql -u root -ptest

MariaDB [(none)]> SHOW VARIABLES LIKE '%time_zone%';

+------------------+------------+
| Variable_name    | Value      |
+------------------+------------+
| system_time_zone | JST        |
| time_zone        | Asia/Tokyo |
+------------------+------------+

パターン②

docker-compose.yml
version: "3.7"
services:
  mariadb:
    container_name: mariadb
    image: mariadb:10.3.16
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci --default-time-zone=Asia/Tokyo
    volumes:
      - ./mariadb-data:/var/lib/mysql
      - /etc/localtime:/etc/localtime:ro
    environment:
      MYSQL_ROOT_PASSWORD: test
    ports:
      - "3306:3306"
$ docker-compose up -d
$ docker exec -it mariadb bash
$ date

Thu Jul 25 17:42:03 UTC 2019

$ mysql -u root -ptest

MariaDB [(none)]> SHOW VARIABLES LIKE '%time_zone%';

+------------------+------------+
| Variable_name    | Value      |
+------------------+------------+
| system_time_zone | UTC        |
| time_zone        | Asia/Tokyo |
+------------------+------------+

2019/12/10追記

Maxscaleの公式イメージを日本のタイムゾーンで動かしたい場合は、
公開されているDockerfileをgit cloneで落としてきて、Dockerfileに
「tzdata」をインストールを追記して、Dockerイメージを作成する必要が
あります。

# Maxscaleの公式イメージでタイムゾーンを設定してDockerコンテナ起動
docker run --name maxscale -d -e TZ=Asia/Tokyo mariadb/maxscale:2.4.4

maxscale]$ docker exec -it maxscale bash

# タイムゾーンの表示がおかしい
root@6f50b8ecd471:/# date
Mon Dec  9 16:11:15 Asia 2019
root@6f50b8ecd471:/# exit
$ docker rm -f maxscale

$ git clone https://github.com/mariadb-corporation/maxscale-docker.git
$ cd maxscale-docker
$ cd maxscale
$ vi Dockerfile

「tzdata」のインストールを追加

Dockerfile
# Dockerfile for the 2.4 GA version of MariaDB MaxScale
FROM ubuntu:bionic

ARG VERSION
ARG GIT_COMMIT
ARG GIT_TREE_STATE
ARG BUILD_TIME

COPY maxscale.list /etc/apt/sources.list.d/maxscale.list.tmp

RUN apt-get -y update && \
    apt-get -y install gnupg2 ca-certificates tzdata && \
    apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys "0x135659e928c12247" && \
    mv /etc/apt/sources.list.d/maxscale.list.tmp /etc/apt/sources.list.d/maxscale.list && \
    apt-get -y update && \
    apt-get -y install maxscale && \
    rm -rf /var/lib/apt/lists/* && \
    if [ ! -z $VERSION ] && [ ! -z $GIT_COMMIT ] && [ ! -z $BUILD_TIME ]; then \
       printf "Version:    $VERSION\nGit commit: $GIT_COMMIT$GIT_TREE_STATE\nBuilt:      $BUILD_TIME\n" > /opt/image_details; fi

COPY maxscale.cnf /etc/
ENTRYPOINT ["maxscale", "-d", "-U", "maxscale", "-l", "stdout"]

COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod 755 /usr/local/bin/docker-entrypoint.sh && \
    ln -s /usr/local/bin/docker-entrypoint.sh /docker-entrypoint.sh # backwards compat
ENTRYPOINT ["docker-entrypoint.sh"]

CMD ["maxscale", "-d", "-U", "maxscale", "-l", "stdout"]
# Dockerイメージ作成
$ docker build -t maxscale:2.4.4 .

# Dockerコンテナ起動
$ docker run --name maxscale -d -e TZ=Asia/Tokyo mariadb/maxscale:2.4.4

# 動作確認
$ docker exec -it maxscale bash
root@b01bd6dd9f47:/# date
Tue Dec 10 01:25:30 JST 2019
91
79
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
91
79