最近不少小伙伴后台私信让浩道出一版关于Docker环境下该如何设置配置时区。那就安排上了,大家有需要参考。方法一:设置环境变量(最常用,推荐)
docker run -e TZ=Asia/Shanghai your_image
services: app: image: your_image environment:
- TZ=Asia/Shanghai
Windows / macOS 在 IANA 时区库里支持的时区名都可用,例如 Asia/Shanghai、Asia/Tokyo、Europe/Paris、UTC 等。方法二:在 Dockerfile 中固化
方法三:挂载宿主机时区文件
docker run \ -v /etc/localtime:/etc/localtime:ro \ -v /etc/timezone:/etc/timezone:ro \ your_image
这样容器直接复用宿主机时间,连 JVM、Python 这类不读 TZ 的程序也会跟着走。方法四:构建镜像时安装 tzdata(Alpine 必须)
Alpine 镜像默认没有时区数据,需要先安装:
RUN apk add --no-cache tzdata && \ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo "Asia/Shanghai" > /etc/timezone
ENV DEBIAN_FRONTEND=noninteractiveRUN apt-get update && apt-get install -y tzdata && \ ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo "Asia/Shanghai"
> /etc/timezone
验证
进容器看一眼:
docker exec -it datedocker exec -it cat /etc/timezone
选择建议
- 临时调试 / 单容器
- 生产镜像 → 方法二 + 方法四(写入 Dockerfile 一劳永逸)
- JVM、数据库这类对时区敏感的进程 → 方法三最稳,或者用
-e TZ 启动后再 docker exec 软链 /etc/localtime