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)
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)
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)
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)
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
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 |
+------------------+------------+
パターン②
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
パターン①
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 |
+------------------+------------+
パターン②
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 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