docker timezone

查看linux主机时间和时区

date -R

查看容器时间和时区

date exec [container] date -R

docker 中如果对时区不加限制,默认会采用格林尼治时间( GMT ),这给日常程序部署、日志查看、错误调试等带来了诸多麻烦与困扰。 每次都需要将 event 发生的显示时间 +8 个时区,手工换算成北京时间,想想都令人抓狂。

解决方案

1、利用 Dockerfile 创建镜像时

FROM docker.io/centos
MAINTAINER DAVID

# 使用RUN命令设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai'>/etc/timezone

2、容器创建时。加入时区挂载选项: -v /etc/localtime:/etc/localtime

docker run -d -p 6379:6379 -v /etc/localtime:/etc/localtime --name test-redis redis

3、容器已启动时

docker exec -it containerId /bin/bash // 进入交互模式,containerId为容器ID或名称,下同
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
docker restart containerId // 重启容器
docker exec containerId date -R // 查看时区

docker-compose.yml

强调: 实验的 docker-compose 为 3.8 版本,其他版本未做相应测试, 请谨慎判别。

方式一

environment:
  - SET_CONTAINER_TIMEZONE=true
  - CONTAINER_TIMEZONE=Asia/Shanghai

方式二

environment:
  - TZ=Asia/Shanghai
  • https://www.jianshu.com/p/004ddf941aac
  • https://segmentfault.com/a/1190000022426190