更改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

bannerAds