如何修复由 Docker 构建生成的容器中的时区



对不起,我是dockerdocker-compose的新手。

"已保存"容器未显示正确的时区。

背景:

  1. 由于公司的限制,我无法将Docker 化的 SpringBoot应用程序放到主机 B 上。
  2. 我的老板告诉我在主机 A 中对SpringBoot应用程序进行 Dockerized 处理。
  3. 在主机 A 中保存docker save $imageName > application.tar
  4. 在主机 B 中加载保存的图像docker load < application.tar
  5. 在主机 B 中运行 Docker 映像...
  6. 主持人 A 和主持人 B 位于同一时区(香港时间(

结果:

  1. 容器内的时区(检查日志结果(在主机 A 中查找日志时间正确(香港时区,UTC+8( (无论是docker run还是docker compose触发(

  2. 容器内的时区(检查日志结果(在主机 B 中发现日志时间错误 (UTC+0( (无论是docker run触发还是docker compose触发(

码头工人版本 客户: 版本: 1.13.1 API 版本:1.26 软件包版本:码头工人-1.13.1-88.git07f3374.el7.x86_64 Go版本:go1.10.2 Git 提交:07f3374/1.13.1 已建成: 周四 12月 6 07:01:49 2018 OS/Arch: linux/amd64

码头工人撰写版本 docker-compose 版本 1.23.2,内部版本 1110AD01 码头工人-py版本:3.6.0 CPython 版本:3.6.7 OpenSSL版本: OpenSSL 1.1.0f 2017年5月25日

托管 A Ubuntu 版本 18.04.3

FROM java:8-jdk-alpine
WORKDIR /root/flexi/
COPY ./target/foo.jar /root/flexi/
### an alpine based image you have to install the tzdata first #### 
RUN apk add --no-cache tzdata

### ENV TZ=Asia/Hong_Kong
### RUN echo "Europe/Stockholm" > /etc/timezone
### RUN dpkg-reconfigure -f noninteractive tzdata
### Not work for ubuntu to dpkg-reconfigure

VOLUME /log
ADD db.properties /root/flexi
EXPOSE 9988
RUN sh -c 'touch foo.jar'
ENTRYPOINT ["java", "-jar", "foo.jar"]
version: '2.2'
services:
foos:
build:
context: ./
dockerfile: Dockerfile
image: foos
ports:
- "9555:9988"
environment:
- TZ=Asia/Hong_Kong
networks:
- network1
volumes:
- /log:/log
networks:
network1:
docker build -t foos .
docker inspect -f '{{ .Created }}'  foos
--> Shows UTC time (in both Host A and Host B)

使用环境变量设置时区

  • 可以使用环境变量设置容器的时区

docker run -e TZ=America/New_York ubuntu date

  • 时区数据包 tzdata 需要安装在容器中
  • 配置 NTP 服务器以确保时区在容器中同步

解决方案:

# install tzdata ref. https://serverfault.com/a/992421/41015
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install tzdata
RUN cp -r -f /usr/share/zoneinfo/Asia/Hong_Kong /etc/localtime

如果不运行此命令,则构建映像不包含/etc/timezone,因此它使用 UTC 时间。

<小时 />

详情

### COPY /etc/timezone      /ect/timezone
### fail. It cannot copy the file to the container internally
################################################
## No luck to execute dpkg-reconfigure for UBUNTU 18.0.4.3
################################################
## ENV DEBIAN_FRONTEND=noninteractive
### RUN dpkg-reconfigure --frontend noninteractive tzdata
OR
### RUN sudo dpkg-reconfigure --frontend noninteractive tzdata
################################################
################################################
## no use
################################################
ENV TZ=Asia/Hong_Kong
### RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
################################################
################################################
## no use
################################################
## RUN echo "Asia/Hong_Kong" > /config/etc/timezone
################################################

相关内容

  • 没有找到相关文章

最新更新