Docker Hue 时区修改完整指南
问题描述 使用Docker启动Hue后,发现时区不正确,显示UTC时间而不是中国标准时间(CST)。具体表现为: HDFS文件时间显示为UTC时间(如06:00-06:01) 实际文件创建时间为中国时间(如14:00-14:01) Hue日志时间格式混乱 解决方案概述 需要从多个层面修改时区设置: 容器系统时区设置 Hue配置文件时区设置 Django时区设置 文件浏览器模块时区处理 详细修改步骤 1. 检查当前容器状态 # 查看运行中的Hue容器 docker ps -a | grep hue # 检查容器时区 docker exec <container_name> date # 检查Hue日志时间格式 docker logs <container_name> --tail 10 2. 备份原始配置 # 备份Hue配置文件 cp /data/server/hue-server/config/hue.ini /data/server/hue-server/config/hue.ini.backup.$(date +%Y%m%d_%H%M%S) cp /data/server/hue-server/config/z-hue-overrides.ini /data/server/hue-server/config/z-hue-overrides.ini.backup.$(date +%Y%m%d_%H%M%S) 3. 修改Hue配置文件中的时区设置 3.1 修改主配置文件 # 修改 hue.ini 中的时区设置 sed -i 's/time_zone=America\/Los_Angeles/time_zone=Asia\/Shanghai/g' /data/server/hue-server/config/hue.ini # 添加Django时区设置 sed -i '/time_zone=Asia\/Shanghai/a use_tz=true' /data/server/hue-server/config/hue.ini 3.2 修改覆盖配置文件 # 修改 z-hue-overrides.ini 中的时区设置 sed -i 's/time_zone=America\/Los_Angeles/time_zone=Asia\/Shanghai/g' /data/server/hue-server/config/z-hue-overrides.ini 4. 重新创建容器(包含时区和DNS设置) 4.1 停止并删除旧容器 docker stop <old_container_name> docker rm <old_container_name> 4.2 创建新容器 docker run -d --name hue_new \ -p 8888:8888 \ -e TZ=Asia/Shanghai \ -v /etc/localtime:/etc/localtime:ro \ -v /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone:ro \ -v /data/server/hue-server/config:/usr/share/hue/desktop/conf \ --dns=100.100.2.136 \ --dns=8.8.8.8 \ gethue/hue:latest 5. 修改文件浏览器模块时区处理 5.1 备份原始文件 docker exec hue_new cp /usr/share/hue/apps/filebrowser/src/filebrowser/views.py /usr/share/hue/apps/filebrowser/src/filebrowser/views.py.backup 5.2 修改时区处理代码 # 添加Django时区导入 docker exec hue_new sed -i "s/from datetime import datetime/from datetime import datetime, timezone, timedelta\nfrom django.utils import timezone as django_timezone/g" /usr/share/hue/apps/filebrowser/src/filebrowser/views.py # 修改时间格式化代码 docker exec hue_new sed -i "s/datetime.fromtimestamp(stats.mtime).strftime('%B %d, %Y %I:%M %p')/django_timezone.make_aware(datetime.fromtimestamp(stats.mtime)).strftime('%B %d, %Y %I:%M %p')/g" /usr/share/hue/apps/filebrowser/src/filebrowser/views.py 5.3 清除Python缓存 docker exec hue_new find /usr/share/hue -name "*.pyc" -path "*/filebrowser/*" -delete docker exec hue_new find /usr/share/hue -name "__pycache__" -path "*/filebrowser/*" -exec rm -rf {} \; 2>/dev/null || true 6. 重启容器应用修改 docker restart hue_new 7. 验证修改结果 7.1 检查系统时区 # 检查容器系统时间 docker exec hue_new date # 检查时区环境变量 docker exec hue_new env | grep TZ # 检查时区文件 docker exec hue_new cat /etc/timezone 7.2 检查Hue应用时区 # 查看Hue日志,确认时间格式 docker logs hue_new --tail 10 # 检查Django时区设置 docker exec hue_new /usr/share/hue/build/env/bin/python3 -c "import os; os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'desktop.settings'); import django; django.setup(); from django.utils import timezone; print('Django timezone:', timezone.get_current_timezone())" 7.3 检查文件浏览器时间显示 访问Hue文件浏览器,查看HDFS文件的时间显示是否正确。 ...