python - 在 Docker 容器内运行 python 脚本时区错误

标签 python python-3.x docker datetime

我正在 Docker 容器 (python:3.6) 中运行一个脚本,它在日志中显示了错误的时间。当在 python 控制台(容器内)中使用以下 python 代码时,它给了我正确的时区。

import datetime
datetime.datetime.now()
datetime.datetime(2019, 8, 3, 17, 26, 25, 662809)

此外,当在容器内运行date命令时,它会给出正确的时区。

但是,我的脚本中有这样的打印语句:

print("Updating....", datetime.datetime.now())

然而,这给了我错误的时区(2个小时)。

enter image description here

这是我的 docker-compose.yml:

version: '3'
services:
  app:
    container_name: app
    build: .
    restart: unless-stopped
    environment:
      TZ: Europe/Amsterdam
    depends_on:
      - db
  db:
    container_name: db
    image: mariadb
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: x
      MYSQL_DATABASE: x
      MYSQL_USER: x
      MYSQL_PASSWORD: x
      TZ: Europe/Amsterdam
    volumes:
      - /volumes/x/db:/var/lib/mysql

这是我的 crontab 文件(在应用程序容器内运行)

CRON_TZ=Europe/Amsterdam

*/5 * * * * cd /usr/src/app && /usr/local/bin/python3.6 -u -m x > /proc/1/fd/1 2>/proc/1/fd/2
0,30 * * * * cd /usr/src/app && /usr/local/bin/python3.6 -u -m x > /proc/1/fd/1 2>/proc/1/fd/2
5 0 * * * cd /usr/src/app && /usr/local/bin/python3.6 -u -m x > /proc/1/fd/1 2>/proc/1/fd/2

我尝试在docker-compose.yml中设置时区,这适用于date命令和python控制台。我尝试在 crontab 文件中设置时区,但它仍然没有在脚本中显示正确的时区。

如何在 crontab 中设置 Python 时区,以便日志具有正确的时区?另外,我需要在 00:05 而不是 22:05 运行脚本,现在可以吗?

最佳答案

如果您尝试将容器中的时区与主机同步,您可以从主机映射时区设置。我已经使用以下卷成功完成了此操作:

-v/etc/localtime:/etc/localtime

或者在您的 docker-compose.yml 文件中:

volumes:
    - /etc/localtime:/etc/localtime

关于python - 在 Docker 容器内运行 python 脚本时区错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57339752/

相关文章:

docker - 如何在 Docker 镜像中写入文件?

java - 引起原因:java.net.UnknownHostException:host.docker.internal

python - 对称矩阵的逆

python - 将 cli 文档中的单击命令分为几个部分

python - 我如何从 linux 的后台检测 python 中的组合键?

python - 使用 list 或 numpy 过滤 3D python 列表

列表过滤的python语法错误

带“尝试”选项的 Python 猜谜游戏

python-3.x - 有没有办法使用python将不同的作业(进程)分配给linux中的特定核心?

未找到 Docker 网络