你如何在春天改变Docker容器TZ?

时间:2017-03-09 06:44:29

标签: java spring docker timezone

我使用的是frolvlad/alpine-oraclejdk8基本图片,正如spring https://spring.io/guides/gs/spring-boot-docker/

所建议的那样
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD gs-spring-boot-docker-0.1.0.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

我正在使用-e TZ=/usr/share/zoneinfo/Europe/Paris

运行图片

我正在设置env TZ,但这不会更改我的容器中的TimeZone。

如何更改此图片的时区?

1 个答案:

答案 0 :(得分:7)

Alpine Linux默认情况下不安装时区文件,以最小化Docker镜像的大小。

您需要显式安装tzdata包,并根据您要设置的时区复制zoneinfo文件。

Dockerfile的示例如下:

FROM frolvlad/alpine-oraclejdk8:slim

RUN apk --update add tzdata && \
    cp /usr/share/zoneinfo/Europe/Paris /etc/localtime && \
    apk del tzdata && \
    rm -rf /var/cache/apk/*

构建图像:

$ docker build -t tztest .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM frolvlad/alpine-oraclejdk8:slim
 ---> 00d8610f052e
Step 2 : RUN apk --update add tzdata &&     cp /usr/share/zoneinfo/Europe/Paris /etc/localtime &&     apk del tzdata &&     rm -rf /var/cache/apk/*
 ---> Running in 5b6a014fdaf3
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/community/x86_64/APKINDEX.tar.gz
(1/1) Installing tzdata (2016i-r0)
Executing busybox-1.25.1-r0.trigger
OK: 14 MiB in 15 packages
(1/1) Purging tzdata (2016i-r0)
Executing busybox-1.25.1-r0.trigger
OK: 10 MiB in 14 packages
 ---> 6c379ddd4186
Removing intermediate container 5b6a014fdaf3
Successfully built 6c379ddd4186

检查容器的date

$ docker run -it --rm tztest date
Thu Mar  9 16:34:54 CET 2017

修改

如果要在运行时设置timzone而不是在构建时设置timzone,请安装tzdata包并且不要在构建时删除:

FROM frolvlad/alpine-oraclejdk8:slim

RUN apk --no-cache add tzdata

构建图像:

$ docker build -t tztest .

然后,您可以在运行时设置环境变量TZ

$ docker run -it --rm -e TZ="Europe/Paris" tztest date
Fri Mar 10 01:59:27 CET 2017