2022.09.30 补充说明 在容器构建阶段指定时区是更靠谱且更有效的处理方式,如果方便删除原有容器重新构建新的容器,在构建命令中写入以下配置语句:
-e TZ=Asia/Shanghai
若不方便删除原有容器,参考下述内容设置,另,各自重点测试服务器重启后修改是否生效;

docker和宿主机的时间是不同步的,相差8小时

原因 : 北京时间东八区时间(CST),而docker默认是世界标准时间(UTC):
CST是指(China Shanghai Time,东八区时间)
UTC是指(Coordinated Universal Time,标准时间)

遇到docker时区不一致,我们只需要对其进行同步处理就可以了
由于docker运行的基础操作系统不同 或者 系统里没装时区工具或是没有zoneinfo信息,处理方式就略有不同:

Docker常用的运行环境

docker常用的操作系统包括alpine、debian、ubuntu、centos
它们的大小都不一样,适用的范围也会有区别
一般由docker中部署的项目特性来决定,镜像大小肯定也是优先考虑的因素:

大部分的linux系统都可以通过命令 获知其系统版本:
cat /etc/issue

# 进入容器命令行
docker exec -it [container_name | container_id] /bin/sh
##########################################
/ # cat /etc/issue
Welcome to Alpine Linux 3.12
Kernel \r on an \m (\l)
##########################################
root@9f1fc6293ff9:/# cat /etc/issue
Debian GNU/Linux 10 \n \l
#########################################
[root@qa ~]# cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m

对于CentOS / Redhat 可以通过 cat /etc/redhat-release 来看具体版本:

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)

对于docker环境,除了进入容器用以上的命令查看方式来判断操作系统版本,有时候可以通过镜像文件dockerfile的images标识或是RUN命令来判断(其实不好判断,一般apk命令是针对alpine,apt-get是针对debian或ubuntu,yum命令是针对centos):

1. busybox下同步时区

busybox是极度轻量版的操作系统,很多时候没法安装时区数据文件,我们可以采用简单粗暴方式,直接从宿主机拷。

# 查看是否有Shanghai时区文件
ls /usr/share/zoneinfo/Asia/Shanghai

如果没有就需要获取时区文件,先进入busybox,如container_id=be318f78137f

docker exec -ti be318f78137f /bin/sh
mkdir -p /usr/share
exit# 拷贝宿主机的时区文件到docker中
docker cp /usr/share/zoneinfo be318f78137f:/usr/share/zoneinfo# 进入busybox,同步时区
docker exec -ti be318f78137f /bin/sh
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

同步完时间后,通过date命令就可以看到时间已和宿主机同步。

另外也可以在dockerfile中完成这个工作:

# 需将/usr/share/zoneinfo先拷到dockerfile的目录下
COPY zoneinfo /usr/share/zoneinfo/
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

2. alpine下同步时区

alpine默认也是没有时区文件,也需要安装:

# 进入容器命令行
docker exec -it [container_name | container_id] /bin/sh# 安装 timezone 数据包,为了防止添加失败,加上-U参数,更新仓储缓存。
apk add -U tzdata# 列出安装的时区文件,验证是否下载成功。
ls /usr/share/zoneinfo# 拷贝需要的时区文件到localtime,国内需要的是Asia/Shanghai:
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone# 验证时区,CST 即为中国标准时间。
date
# Tue Jun 30 11:53:46 CST 2020# 移除时区文件:
apk del tzdata

另外也可以在dockerfile中添加以下内容,完成时区的构建:

# Install root filesystem
ADD ./rootfs /
# Install base packages
RUN apk update && apk add curl bash tree tzdata \&& cp -r -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo -ne "timezone Asia/Shanghai. (`uname -rsv`)\n" >> /root/.built

3. debian / ubuntu下同步时区

# 进入容器命令行
docker exec -it [container_name | container_id] /bin/bash# 列出安装的时区文件,验证是否存在tzdata。
ls /usr/share/zoneinfo
# 一般是已经安装了 timezone 数据包,如未安装则执行
apt-get install tzdata# 软链接时区文件到localtime
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

另外也可以在dockerfile中添加以下内容,完成时区的构建:

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

4. centos下同步时区


# 进入容器命令行
docker exec -it [container_name | container_id] /bin/bash# 一般都已经安装了 timezone 数据包,如遇到未安装则执行
yum install -y tzdata# 软链接时区文件到localtime
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

在dockerfile中可以添加:

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone

如果你获取的docker镜像没有root权限
你又着急马上进入容器修改时区
那就简单暴力一点
直接从宿主机拷入时区文件到docker中
实现时区的修改:

docker cp /usr/share/zoneinfo/Asia/Shanghai 容器ID:/etc/localtime
echo 'Asia/Shanghai' >/etc/timezone && docker cp /etc/timezone 容器ID:/etc/timezone

————————————————
原文链接:https://blog.csdn.net/smooth00/article/details/107058753

解决.net6 Docker容器 DateTime.Now 获取时间相差8小时问题相关推荐

  1. java获取时间相差8小时的问题及解决方式

    三种时间差错问题: java下使用new date()获取的时间会和真实的本地时间相差8小时. 本地获取的时间没有错,存入数据库的时候时间相差8小时. 数据库时间没有错,获取到了后端,之后返回给前端相 ...

  2. centos java 时间差8个小时_解决Centos7本机时间与实际时间相差8小时

    GPS系统中有两种时间区分,UTC就0时区的时间,CTS为本地时间,如北京为早上八点(东八区),UTC时间比北京时晚八小时; CTS:China Standard Time,UTC+8:00 中国沿海 ...

  3. 解决CentOS7本机时间与实际时间相差8小时的问题

    查看当前日期时间: timedatectl 删除原来的时间日期配置 rm -rf /etc/localtime 链接指向新的时间日期配置 ln -sv /usr/share/zoneinfo/Univ ...

  4. 关于 Docker 容器中东八区时间设置问题的总结

    文章目录 一.场景描述 二.问题分析 三.解决方案 一.场景描述   在采用容器化部署应用程序的过程中,发现写日志的时间是正确的东八区时间,但是容器内部采用 date 获取的时间比实际东八区的时间慢了 ...

  5. 解决:docker容器内可以访问web应用,端口映射到宿主机却无法访问,错误代码:curl: 56 Recv failure: 连接被对方重设

    解决:docker容器内可以访问web应用,端口映射到宿主机却无法访问,错误代码:curl: 56 Recv failure: 连接被对方重设 或者 curl: 52 Empty reply from ...

  6. 系统时间与docker中mysql数据库时间相差八小时解决方法

    情景:在项目中往数据库差数据时,发现时间字段在mysql显示的时间和当前系统时间老是相差八小时,查看可能是mysql当前时区没设置好的问题. 一.docker exec -it your_mysql_ ...

  7. php源码 时间慢8小时 etc gmt,PHP 中 Date 函数与实际时间相差8小时的解决方法

    PHP 中的 date() 函数显示的时间是格林威治时间,和北京时间正好相差8个小时,其他时间相关的函数,如 strtotime() 也有相同的问题,同样可以通过下面的方法来解决: 1. 修改php. ...

  8. Docker容器部署项目少了8个小时,问题解决Dockerfile修改linux时区

    Docker容器部署项目少了8个小时,问题解决&&Dockerfile修改linux时区 情景回顾 打包好的jar包通过Dockerfile构建成一个镜像后,通过docker-comp ...

  9. linux时间跳变影响,Linux起用夏令时,跳变后导致容器日志时间和系统时间相差一小时...

    Linux启用夏令时,跳变后导致容器日志时间和系统时间相差一小时 日志时间与系统时间相差一小时解决方案 一. 分析 2007年10月分,夏令时曾经做更改,2007年与之前发布的jdk版本均有此问题,2 ...

最新文章

  1. docker 部署mysql服务之后,执行sql脚本
  2. 【流量劫持】躲避 HSTS 的 HTTPS 劫持
  3. wps 模拟分析 规划求解_【图书推荐】金属塑性加工过程有限元数值模拟及软件应用...
  4. 图像基本处理算法的简单实现(二)
  5. mysql无法与外部健形成约束_MySQL Rails:错误:150“外键约束不正确”
  6. 大限将至?Google先知
  7. error LNK2019: unresolved external symbol __imp__JNI_CreateJavaVM@12 referenced in function _wmaim
  8. python logisticregression_Python机器学习sklearn LogisticRegression用户流失预测模型初探
  9. 《物联网IoT解决方案》(Unity+SteamVR+云技术+5G+AI+物联网+IoT+人机交互+万物互联+物物互联+射频识别+全球定位系统+实时采集+智能化感知+识别+管理+立钻哥哥+==)
  10. 使用VS Code插件Code Runner一键运行OpenSees
  11. 网络抖动多少ms算正常_如何测试网络稳定
  12. 指数基金日涨跌幅python_用Python验证指数基金定投策略
  13. Android--DES加密解密
  14. AVL树【图示详解+代码实现】
  15. 学用circle画圆形。
  16. Boost.Geometry中的几何要素(Primitives)
  17. 第一台电子计算机教授领导,第一台电子计算机
  18. Linux基础(2)/Linux 基本概念及操作
  19. 仅一张人脸就能被扒得底裤不剩:口罩墨镜都没用,跨平台跨时空,这个人脸搜索惹了众怒...
  20. @Scope注解设置创建bean的方式和生命周期

热门文章

  1. 运用SolidWorks三维图型转二维图时的三视图倾斜问题(三维图的基准面不正确)
  2. 数字人民币与区块链的区别与联系
  3. PID控制器改进笔记之七:改进PID控制器之防超调设定
  4. C#的Enum转换与提取以及ComboBox的selectedItem
  5. MFC界面库BCGControlBar v33.0 - 桌面警报窗口、网格控件升级
  6. 类聚算法matlab,机器学习实战ByMatlab(一)KNN算法
  7. 迭代阈值法,otsu阈值法,特征空间类聚法对图像进行分割(python)
  8. 编写一个程序,把您的年龄转换成天数并显示二者的值。不用考虑平年( fractional year)和闰年(leapyear)的问题
  9. 数字孪生制造:数字孪生技术在制造业可视化中的实践与挑战
  10. 格式化 U 盘,并还原分区