Saki's 研究记录

修改基于 alpine 系统的 Docker 镜像时区配置

字数统计: 501阅读时长: 2 min
2021/11/15

图片来源:timeanddate.com

图片来源:timeanddate.com

由于alpine提供的linux环境的镜像特别的小,只有5M左右,因此应用非常广泛,在Docker Hub有大量基于alpine的镜像。
举例拿Alpine Linux Ubuntu 18.04对比:

1
2
3
4
5
6
7
8
9
10
$ docker pull --quiet ubuntu:18.04
docker.io/library/ubuntu:18.04
$ docker pull --quiet alpine
docker.io/library/alpine:latest
$ docker image ls ubuntu:18.04
REPOSITORY TAG IMAGE ID SIZE
ubuntu 18.04 ccc6e87d482b 64.2MB
$ docker image ls alpine
REPOSITORY TAG IMAGE ID SIZE
alpine latest e7d92cdc71fe 5.59MB

但是所有基于alpine的镜像使用的都是默认时区,因此在使用时要对时区进行修改。

做个实验,进入alpine的镜像(默认 /bin/sh)查看日期,会比在本机获取的时间早8小时:

1
2
3
4
5
6
# alpine 镜像内时间日期:
docker run -i -t --rm alpine:latest date -R
Mon, 15 Nov 2021 03:30:28 +0000
# 本地时间日期:
date -R
Mon, 15 Nov 2021 11:30:32 +0000

按照文档Setting the timezone中提供的信息修改时区:

1
2
3
4
5
6
7
8
9
10
11
12
# 安装时区设置
apk add tzdata
# 复制上海时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 指定为上海时区
echo "Asia/Shanghai" > /etc/timezone
# 验证
date -R
# 输出,和当前时间对比
Thu, 14 Feb 2019 14:01:02 +0800
# 删除其他时区配置,节省空间
apk del tzdata

方法可行,修改命令保存为Dockerfile文件,在Dockerfile目录执行命令构建镜像:

1
2
3
4
5
6
FROM alpine:latest

# 设置时区为上海
RUN apk add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& apk del tzdata

创建镜像:

1
docker build -t alpine-sh:latest .

进入alpine-sh的镜像(默认 /bin/sh)查看日期:

1
2
docker run -i -t --rm alpine-sh:latest date -R
Mon, 15 Nov 2021 11:41:07 +0800

可见日期已改变为上海时区,所有基于alpine的镜像都可以采用类似的方法进行修改。

ubuntu/debian -> alpine
python:3 -> python:3-alpine
ruby:2.6 -> ruby:2.6-alpine

Reference

Done.

CATALOG
  1. 1. Reference