Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django linux“;日期“;正确,但python tzlocal在docker容器中报告utc_Django_Docker - Fatal编程技术网

Django linux“;日期“;正确,但python tzlocal在docker容器中报告utc

Django linux“;日期“;正确,但python tzlocal在docker容器中报告utc,django,docker,Django,Docker,我正在加载docker compose文件 volumes: - /etc/localtime:/etc/localtime:ro 当我和你一起进入容器时 docker exec-it bash 然后运行date它会正确显示。但在django和python3编辑器中,tzlocal显示UTC ogixbuild$docker exec-it qlogixwebapi bash root@3e1a15562c2f:/var/lib/django/webapi#date 2018年2月8日星期

我正在加载docker compose文件

volumes:
  - /etc/localtime:/etc/localtime:ro
当我和你一起进入容器时
docker exec-it bash
然后运行
date
它会正确显示。但在django和python3编辑器中,tzlocal显示UTC

ogixbuild$docker exec-it qlogixwebapi bash
root@3e1a15562c2f:/var/lib/django/webapi#date
2018年2月8日星期四15:14:31 MST
root@3e1a15562c2f:/var/lib/django/webapi#python3
Python 3.6.4(默认值,2017年12月21日01:35:12)
[GCC 4.9.2]在linux上
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
本地进口
tzlocal.get_localzone()


有过这方面的经验的人知道如何让tzlocal获得正确的时区吗?

因此,通过将这两个卷添加到docker compose文件,我现在有了工作时区。
日期
命令和tzlocal命令都起作用

volumes:
  - /etc/localtime:/etc/localtime:ro
  - /etc/timezone:/etc/timezone:ro
root@96245334a7c9:/var/lib/django/webapi#date

2018年2月8日星期四18:45:23 MST

root@96245334a7c9:/var/lib/django/webapi#python3

Python 3.6.4(默认值,2017年12月21日01:35:12)

[GCC 4.9.2]在linux上

有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”

本地进口

tzlocal.get_localzone()

DstTzInfo“美国/丹佛”LMT-1日,标准时间17:00:00

正如您所看到的,日期和tzlocal现在都返回正确的时间和时区。现在我的django应用程序按预期工作


我喜欢这种方法,因为它将主机时间动态地放入docker容器中。没有硬编码时区或任何东西。

这是django python shell吗?那么下面是相关的否,这是docker容器中的bash shell。我看到在我的主机上/etc/localtime是一个符号链接,而在docker容器中/etc/localtime是一个文件(主机符号链接的结果),我认为这与此有关。我现在在tzlocal源代码中看到,它首先尝试从环境中获取时区,然后在/etc/timezone中查找。My/etc/时区包含etc/UTC。因此,它甚至没有进入tzlocal中查看/etc/localtime的代码。因此,我需要docker compose或Dockerfile来填充/etc/timezone或设置TZ环境变量。true,这就是我希望看到结果的原因。但是,在redhat中,解析路径是
/etc/localtime
,它是指向
/usr/share/zoneinfo
中一个文件的符号链接。关于
/etc/timezone