docker-容器时区和宿主时区不一致的解决方法

前言

部署完容器后,查看宿主的时间(date -R)如下:

Mon May 18 10:30:38 CST 2020

查看容器的时间是:

Mon May 18 02:35:01 UTC 2020

可以看出两者的时区不一样,宿主是CST,而容器默认是UTC。

单独查时区用:date +"%Z"

解决方法

同步参考

使用环境变量ZT

使用docker run命令或者在Dockerfile中或者yml文件中指定TZ环境变量。

docker run

docker run -e TZ=Asia/Shanghai ...

Dockerfile

FROM openjdk:11.0.5-jre-slim
LABEL maintainer=Admin
ENV SPRING_PROFILES_ACTIVE=quilt
ENV TZ=Asia/Shanghai
WORKDIR /app
COPY . ./
ENTRYPOINT ["java", "-server", "-jar", "periscope-server-0.0.1-SNAPSHOT.jar"]
EXPOSE 8080

yml文件

version: "3.7"
networks:
  xxl:
    external: true
services:
  quilt:
    image: xxl.quilt:latest
    networks:
      - xxl
    ports:
      - "12307:12307"
    volumes:
      - ./server/quilt:/app/file:rw
    environment:
      - TZ=Asia/Shanghai
    deploy:
      replicas: 1

优势和缺点

优势就是操作简单,每个容器可以单独定义时区。缺点就是由于各种原因(人为配错等)可能导致和宿主的时区不同。

遗留问题

当容器启动以后,分别使用date命令和cat /etc/localtime,发现两者并不相同:
在这里插入图片描述
可能是ZT的优先级大于/etc/localtime吧。但是java服务器返回的时间是正常的。

挂载宿主的目录/etc/localtime

使用挂载目录时,容器启用后。分别用date和cat /etc/localtime查看时区,发现date和/etc/localtime的时区都没问题,但是java服务器的时间不对。所以不建议使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值