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

Dim*_*iwa 3 java timezone spring docker

我正在使用frolvlad/alpine-oraclejdk8spring推荐的基本映像: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" ]
Run Code Online (Sandbox Code Playgroud)

我正在运行图像 -e TZ=/usr/share/zoneinfo/Europe/Paris

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

你如何改变这张图片的时区?

min*_*oyo 8

默认情况下,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/*
Run Code Online (Sandbox Code Playgroud)

构建图像:

$ 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
Run Code Online (Sandbox Code Playgroud)

检查date容器:

$ docker run -it --rm tztest date
Thu Mar  9 16:34:54 CET 2017
Run Code Online (Sandbox Code Playgroud)

编辑:

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

FROM frolvlad/alpine-oraclejdk8:slim

RUN apk --no-cache add tzdata
Run Code Online (Sandbox Code Playgroud)

构建图像:

$ docker build -t tztest .
Run Code Online (Sandbox Code Playgroud)

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

$ docker run -it --rm -e TZ="Europe/Paris" tztest date
Fri Mar 10 01:59:27 CET 2017
Run Code Online (Sandbox Code Playgroud)