更改Docker容器的时区的方法是什么?
通过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进行更改。
$ 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挂载到卷上会出现问题,
建议阅读以下网站内容。
在Docker中挂载/etc/localtime到主机上遇到的问题
将Ubuntu 16.04(xenial)上的Docker容器时区设置为日本(JST)(在Dockerfile中)
追加于2019年7月29日
在使用容器时最好不要更改时区而直接保持原样。
最好不要将/etc/localtime挂载到主机上的volume。
・如果想要更改容器的时区,如果操作系统支持使用环境变量”TZ”,可以使用它。
・有关在ubuntu:xenial上使用-e TZ=Asia/Tokyo运行docker run也无法更改时区的信息可查找。
・在Ubuntu 16.04(xenial)的Docker容器中将时区更改为日本(JST)(在Dockerfile中)。
・由于Alpine Linux没有准备好zoneinfo之类的内容,因此需要使用apk命令安装tzdata软件包来更改时区。
・在Alpine Linux上更改时区。
・在Alpine Linux上更改时区(最新版本?)。
・在Docker的Alpine Linux上将时区更改为JST。
・在Docker的Alpine Linux上遇到了时区问题。
关于Ubuntu Docker容器的时区更改… 2019/11/12补充说明
Ubuntu:bionic(18.04) ➔ 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
乌班图:迪斯科版(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是其操作系统版本。操作系统的时区默认为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
亚马逊Linux2
操作系统的时区默认为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的官方映像,可以通过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