你如何在spring更改Docker容器TZ?

我正在使用spring推荐的frolvlad/alpine-oraclejdk8基础镜像: https : frolvlad/alpine-oraclejdk8

 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。

你如何改变这个图像的时区?

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/* 

build立图像:

 $ 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而不是build,请安装tzdata软件包,不要在build上删除:

 FROM frolvlad/alpine-oraclejdk8:slim RUN apk --no-cache add tzdata 

build立图像:

 $ docker build -t tztest . 

然后,您可以在运行时设置环境variablesTZ

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