我尝试使用Docker设置Alpine的时区


我使用Alpine设置了JST时区,这是Docker的官方基础映像。

单击此处以供参考
https://wiki.alpinelinux.org/wiki/Setting_the_timezone

检查默认日期和时间

创建以下docker-compose.yml和

docker-compose.yml

1
2
3
4
version: '3'
services:
  timezone:
    image: alpine:3

在外壳中输入容器

SH

1
$ docker-compose run timezone sh

使用

日期命令

显示日期和时间

SH

1
2
# date
Mon Sep 23 08:49:05 UTC 2019

显示UTC时间

安装tzdata

SH

1
2
3
4
5
6
# apk add tzdata
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
(1/1) Installing tzdata (2019b-r0)
Executing busybox-1.30.1-r2.trigger
OK: 9 MiB in 15 packages

已创建一个包含时区设置的zoneinfo目录。

SH

1
2
3
4
5
6
7
# ls /usr/share/zoneinfo
Africa        Australia     Cuba          Etc           GMT+0         Iceland       Kwajalein     NZ            Poland        UCT           Zulu
America       Brazil        EET           Europe        GMT-0         Indian        Libya         NZ-CHAT       Portugal      US            iso3166.tab
Antarctica    CET           EST           Factory       GMT0          Iran          MET           Navajo        ROC           UTC           posixrules
Arctic        CST6CDT       EST5EDT       GB            Greenwich     Israel        MST           PRC           ROK           Universal     right
Asia          Canada        Egypt         GB-Eire       HST           Jamaica       MST7MDT       PST8PDT       Singapore     W-SU          zone.tab
Atlantic      Chile         Eire          GMT           Hongkong      Japan         Mexico        Pacific       Turkey        WET           zone1970.tab

顺便说一句,在安装之前,我很生气,因为没有目录

SH

1
2
# ls /usr/share/zoneinfo
ls: /usr/share/zoneinfo: No such file or directory

创建一个/ etc / localtime文件来设置JST时区

创建一个

/ etc / localtime文件,然后复制/ usr / share / zoneinfo / Asia / Tokyo的内容。

/ usr / share / zoneinfo /亚洲/东京

1
2
TZif2^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^D^@^@^@^D^@^@^@^@^@^@^@       ^@^@^@^D^@^@^@^L.^@^@^@.>^Bp..Y....p..;..^G^@...^].........^C^A^B^A^B^A^B^A^B^@^@.^C^@^@^@^@..^A^D^@^@~.^@
JST-9

我不确定第一行...
字符是否乱码?

JST-9

它是否表示UTC与JST之间的9个小时差异?

SH

1
# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

/ etc / localtime

1
2
TZif2^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^D^@^@^@^D^@^@^@^@^@^@^@       ^@^@^@^D^@^@^@^L.^@^@^@.>^Bp..Y....p..;..^G^@...^].........^C^A^B^A^B^A^B^A^B^@^@.^C^@^@^@^@..^A^D^@^@~.^@
JST-9

/etc/localtime已创建并且内容已复制

设定时区

SH

1
# echo "Asia/Tokyo" >  /etc/timezone

/ etc /时区

1
Asia/Tokyo

设置正确

按日期检查时间

SH

1
2
# date
Mon Sep 23 17:55:57 JST 2019

在JST时间显示的

清理后卸载tzdata

SH

1
2
3
4
# apk del tzdata
(1/1) Purging tzdata (2019b-r0)
Executing busybox-1.30.1-r2.trigger
OK: 6 MiB in 14 packages

SH

1
2
# ls /usr/share/zoneinfo
ls: /usr/share/zoneinfo: No such file or directory

我能够正确卸载它。

奖金

如果要使用环境变量TZ在dockerfile或docker-compose.yml中设置时区,
可以设置而无需卸载tzdata
(即使将其设置为卸载,也不会反映出来)

在dockerfile

中设置环境变量TZ

docker文件

1
2
3
4
FROM alpine:3

RUN apk add tzdata
ENV TZ=Asia/Tokyo

docker-compose.yml

1
2
3
4
version: '3'
services:
  timezone:
    build: ./

SH

1
$ docker-compose build

SH

1
$ docker-compose run timezone sh

SH

1
2
# date
Mon Sep 23 18:51:33 JST 2019

在docker-compose.yml

中设置环境变量TZ

docker文件

1
2
3
FROM alpine:3

RUN apk add tzdata

docker-compose.yml

1
2
3
4
5
6
version: '3'
services:
  timezone:
    build: ./
    environment:
      TZ: Asia/Tokyo

SH

1
$ docker-compose build

SH

1
$ docker-compose run timezone sh

SH

1
2
# date
Mon Sep 23 19:00:33 JST 2019

结束

深时区