问题描述

部署在docker上的web程序,获取当前时间时,与服务器时间相差四个多小时

解决方法

  • 在dockfile中加

    1
    2
    3
    4
    5
    # 添加时区环境变量,亚洲,上海
    ENV TimeZone=Asia/Shanghai
    # 使用软连接,并且将时区配置覆盖/etc/timezone
    RUN ln -snf /usr/share/zoneinfo/$TimeZone /etc/localtime && echo $TimeZone > /etc/timezone

    修改后的dockerfile文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    FROM openjdk:8
    MAINTAINER lcf
    # 添加时区环境变量,亚洲,上海
    ENV TimeZone=Asia/Shanghai
    # 使用软连接,并且将时区配置覆盖/etc/timezone
    RUN ln -snf /usr/share/zoneinfo/$TimeZone /etc/localtime && echo $TimeZone > /etc/timezone
    ADD boss-server.jar boss-server.jar
    EXPOSE 8080
    ENTRYPOINT ["java","-jar","boss-server.jar"]

其他解决方法

  • dockerfile中添加

    1
    2
    3
    4
    # CentOS
    RUN echo "Asia/shanghai" > /etc/timezone
    # Ubuntu
    RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  • docker run 添加时间参数

    1
    2
    # 实例1
    docker run -p 3306:3306 --name mysql -v /etc/localtime:/etc/localtime
  • 宿主机直接执行命令给某个容器同步时间

    1
    2
    3
    4
    5
    6
    # 方法1:直接在宿主机操作
    docker cp /etc/localtime 【容器ID或者NAME】:/etc/localtime
    docker cp -L /usr/share/zoneinfo/Asia/Shanghai 【容器ID或者NAME】:/etc/localtime

    # 方法2:登录容器同步时区timezone
    ln -sf /usr/share/zoneinfo/Asia/Singapore /etc/localtime

完成后,再通过date命令进行查看当前时间

1
select now() from dual;