本文主要记录在使用 Alpine 镜像时如何解决时区问题。

首先创建一个基础的镜像用于测试:

from alpine:latest 
  1. 构建镜像:docker image build -t alpine-test .
  2. 启动容器并进入终端:docker run --name alpine -it alpine-test:latest

容器内执行 date -R,输出:Wed, 01 Sep 2021 02:43:24 +0000,发现不是中国时区。

容器已启动

在容器已启动的情况下,可以通过安装 tzdata 来设置时区。

  1. apk add -U tzdata
  2. cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

再次测试,输入期望结果:Wed, 01 Sep 2021 10:48:07 +0800

最后删除时区文件:apk del tzdata

编写镜像时设置时区

from alpine:latest 

ENV TZ Asia/Shanghai

RUN apk add tzdata && cp /usr/share/zoneinfo/${TZ} /etc/localtime \
    && echo ${TZ} > /etc/timezone \

重新构建镜像并测试,时区设置正常。在有的教程里面最后会添加删除时区文件的命令,但是经过测试,添加该命令后时区设置会失效

参考资料