在 Docker 容器中部署 Django 的时区问题

一起养成写作习惯!这是我参与的!「日新计划 」第十天,点击查看活动细节。
现在容器部署非常成熟,我们的很多服务都会使用容器部署,更新和恢复都非常成熟shell什么意思方便,但是有一个问题比较麻烦,那就是时区处理,通常采用注入django安装教程 TZ 解决环境变量,但实际处理方法是 django 中却是django摩托车不行。
Django 与时区linux相关的配置
在Django配置文件 settings.django框架主要用于做什么py 中有两个配置参数与时间和时区有关,即TIME_ZOlinux必学的60个命令NE和USE_TZ。我们期待着通过 settings.py 中配置后,Djadjangdjango教程o教程ngo 可以正确获得当地时间,但实际上事与愿违。让我们windows10看看这两个设置。django项目有什么作用?
USE_TZ=DjangoTrue
如果 USE_TZ 设置为 Trshell脚本编程100例ue 时,Django 将使用系统默认设置的时区,此时,TIME_ZONE设置基本无效,即无论设置与否都不起作用。
USE_TZ=F变量类型有哪些alse
如果Django USE_TZ 设置为 False
TIME_ZONE 设置为django框架主要用于做什么None
Django 仍将使用默认时区
若 TIME_ZONE如果将 设置为其他时区,
如果是 Windows 系统,则 TIMdjango框架主要用于做什么E_ZONE 设置是无用的,Djadjango菜鸟教程ngo使用机器的时间
如果是其他系统,则使用时区 UDjangoTC 时间
例如设置 USE_TZ = Fa变量名lse, TIME_ZONE = ‘Awindows10激活密shell是什么意思中文钥sia/Shanghai 使用变量类型有哪些上海的UTC时间。
这一步,可django变量值摩托车可以认为时间已经很好了,但实际linux上还没有,我们需要注意系统时区的设置。
Linux 设置容器中时区shell翻译
现在我的本地时间是:16:15,Django设置为:USE_TZ = False, TIME_ZONE = ‘Asidjango摩托车a/Shanghai’
不注入 Tdjango面试题Z=Alinux系统安装si变量是什么意思?a/Slinux命令hanghai 环境变量
进入容器查看容器windows10时间和时区
显示系统时间的是 UTC 时区,时间为:08:15,刚好差 8 小时
进入 Django环境检查时间和时区
python manage.pyLinux shell
from datetime import datetime
datetime.now()
# 输出 datetime.datetime(2021、 10、8、8、24linux是什么操作系统、8、289230)
from django.utils import timedjango文档zone
timezone.get_current_timezone_name()
# 输出 ‘Asia/Shanglinux虚拟机hai’
注入环境变量 TZ=Asia/Shanghai
进入windows10激活密钥容器查看时间和时区
显示系统时间的django项目是 Awindows怎么激活sia 时区,但时间还是变量名 UTC 时间并没有显django教程示真正的本地时间
进入 Django 环境检查时间windows如何激活和时区
python manage.py shell
from datetime import datetime
datetime.now()
# 输出 datetime.datetime(2021、 10、8、8、2django框架4、8、289230)
fro变量的定义m django.utils import timezShellone
timezone.get_current_timezone_name()
# 输出 ‘Alinux必学的60个命令sia/Shanghai’
可见,虽变量值然时区变了,但时间还是 UTC 时间,无论是容器本身还是 Djalinux系统安装ngo 中
通过网上查询,我们知道修改 Linux修改 系统时区etc/localtime 文件
修改 Linux 容器时区
通常的做法是将变量类型有哪些宿主机 /etc/localtime 文件复制到容器 /linux重启命令etc/localshell命令time 文件,但我shell中文是什么意思?etc/localtime 文件变量英变量类型有哪些语实际上只是一个软连接,实际文件是:/usr/share/zondjango怎么读einfo/Asshell编程ia/Shanghai
docker cp /usr/share/zoneinfo/Asia/Shanghai test:/etc/localtime
不要给容器注Linux入 TZ=Adjango怎么读sia/Shanghai在环境变量的情况下,我们登录变量名的命名规则容器,发现哪些变量类变量类型有哪些型的容器的系统时间已经正确获得了本地时间shell和时区是什么意思?
若注入 TZ=Asia/Shanghai 环境变量,即使是 //etc/localtime 文变量是什么意思django摩托车,也只是时区变了,时间还是 UTC 时间
进入 Djan变量类型有哪些go 环境检查时间
python manage.py shell
from datetime import datwindows更新有必要吗etlinux创建文件ime
datetime.now()
# 输出 datetime.datetime(2021、 10、8、8、43、43、75498)
Linux 系统时间正常,但 Django 环境中的时间还是不正确的,还是 UTC 时间,这个时候很多人都有linux重启命令点疯狂,可能觉得是 selinux重启命令ttings.linux系统安装py 中的 USE_TZ 和 TIME_ZONE 设置有问题,其实问题不在linux是什么操作系统这里。原因是 datetime 库会/usr/linux必学的60个命令share/zoneilinux系统安装nfo在目录下寻找 Asia/Shanghai 这个文件,我们的镜子,django这个目录不包含在面试图中,所以 Djang变量之间的关系o 还是用了 UTC 时区。解决方案很简单:创建 ///usr/share/zoneinfo/AsLinuxia 目录,将文件复制到这个目录下。
# 在容器内(如不存在此目录)
mkdir -p /usr/share/zoneinfo/Asia
# 在容器外
dockershell编程 cp /usr/share/zoneinfo/Asia/Shanghai test:/usr/share/zoneinfo/Asia/Shanghai
然后登录容器,shell翻译进入 Django在环境中查看时间
python manage.py shell
from datetime import datetime
datetime.now()
#输出 datetime.datetime(2021、 10、8、16、49、32、57)
现在时间完全正确了。
总结
linux必学的60个命令于容器时区问题,建议在容器制造阶段安装设置 /etc/localtime,例如在 dlinux虚拟机ockerfile在 中加入以下句子
ADWindowsD /usr/share/zoneinfo/Asia/Shanghai /usr/share/zoneinfo/Ashell脚本sia/Shangshell编程hai
RUN ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
这样,我们的shell脚本编程100例容器在启动时就不需要注意时区问题,比如shelly果容器已经制作好了,启动时挂载时区文shell脚本
docker run -d -v /etc/localtime:/etc/localtime -v /usrlinux系统/share/zoneinfo/Asia/Shanghai:/usr/share/zoneinfo/Ashell脚本sia/Shanghai imageName
这种方法更麻烦。另一种情况是我们现在遇到的。服务已经启动了变量泵。如果发现时变量名间有问题,手动将两个文件复制到容器中,然后windows键是哪个重启容器
docker cp /usr/share/zolinux系统neinfo/Asia/Shanghai test:/etc/localtime
docker cp /usr/share/zoneinfo/Asia/Shanghai test:/usr/share/zoneinfo/Asia/Shanghai
docker restart test

发表评论

提供最优质的资源集合

立即查看 了解详情