Docker Hub 中的官方镜像,一般都默认设置为 UTC 时间。而我们位于东八区,在启动容器或构建自己的镜像时,往往需要对时区进行设置。根据基础镜像的不同,设置时区的方法也有所区别。

基于 Debian 镜像

由于 Debian 镜像中已经包含了 tzdata,因此设置时区的方法比较简单,只需添加环境变量 TZ 即可。我们可以通过启动一个 Debian 容器,运行其中的 date 命令来验证。

root@677e5c1c1e19:/# date
Sat Jan 12 10:25:27 UTC 2019
root@677e5c1c1e19:/# export TZ=Asia/Shanghai
root@677e5c1c1e19:/# date
Sat Jan 12 18:25:44 CST 2019

当需要在容器中使用本地时间的时候,只需在启动容器时,添加参数-e TZ=Asia/Shanghai即可。

如果是构建 Docker 镜像,可以这样写:

FROM debian:stretchENV TZ=Asia/Shanghai

基于 Alpine 镜像

与 Debian 镜像不同,Alpine 镜像中并没有包含 tzdata,所以只设置 TZ 环境变量并不能达到我们想要的效果,因此需要安装 tzdata。

/ # date
Sat Jan 12 10:37:07 UTC 2019
/ # export TZ=Asia/Shanghai
/ # date
Sat Jan 12 10:37:34 UTC 2019
/ # apk add tzdata
......
......
/ # date
Sat Jan 12 18:38:18 CST 2019

由于无法直接通过环境变量设置时区,因此需要在容器中使用本地时间时,只能先基于原有的镜像构建自己的镜像,在启动容器时使用自己构建的镜像即可。

FROM alpine:3.9ENV TZ=Asia/ShanghaiRUN apk update \&& apk add tzdata \&& echo "${TZ}" > /etc/timezone \&& ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \&& rm /var/cache/apk/*

基于 Ubuntu 镜像

Ubuntu 镜像中也没有包含 tzdata,设置时区的方法与 Alpine 镜像相似。

root@2a33fc02c099:/# date
Wed Mar  6 13:12:44 UTC 2019
root@2a33fc02c099:/# export TZ=Asia/Shanghai
root@2a33fc02c099:/# date
Wed Mar  6 13:13:08 Asia 2019
root@2a33fc02c099:/# echo "${TZ}" > /etc/timezone
root@2a33fc02c099:/# ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime
root@2a33fc02c099:/# apt update
......
......
root@2a33fc02c099:/# apt install -y tzdata
......
......
root@2a33fc02c099:/# date
Wed Mar  6 21:15:52 CST 2019

写成 Dockerfile 如下:

FROM ubuntu:bionicENV TZ=Asia/ShanghaiRUN echo "${TZ}" > /etc/timezone \&& ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \&& apt update \&& apt install -y tzdata \&& rm -rf /var/lib/apt/lists/*

在 Docker 中设置时区相关推荐

  1. PHP设定美国东部时区,PHP中设置时区方法总结

    方法一,在php页面设置时区 在页面最前面加上下面应用一种都是可以的 date_default_timezone_set用法如下 date_default_timezone_set (PHP 5 &g ...

  2. 解决自己在docker中设置redis密码不生效的问题

    解决自己在docker中设置redis密码不生效的问题 配置文件官网下载 下载解压后得到redis.conf文件 我的redis.conf文件 网盘 提取码:1szk 正确的在redis启动redis ...

  3. php中date设置北京时区,PHP中设置时区方法小结

    PHP代码中的时间判断语句出了点问题,问题出在PHP的时区设置上,PHP所取的时间默认是格林威治标准时间,所以和北京时间相差8小时.找到原因后,在网上搜索到了一些关于PHP的时区设置方法:1.修改ph ...

  4. mysql中设置时区

    首先,查看下mysql中使用的时区 show variables like '%time_zone%'; 测试查看下时间 select now(); 2018-10-24 15:49:17 这个应该是 ...

  5. 【linux】 redhat中设置时区

    前提 redhat7.0 设置时区:Asia/Shanghai. 查看时区 # timedatectl status ---------------------------Local time: We ...

  6. MySql中设置时区为东八区

    在mysqld下新增配置  default-time-zone = '+8:00' 然后重启mysql服务:windows下管理员身份启动cmd ,net stop mysql :  net star ...

  7. php 配置文件设置时区_PHP中设置时区方法

    一直以来,发现iProber.php探针显示的服务器时区有问题,尽管已经将服务器时区设置为Asia/Shanghai,仍然无法解决这个问题.经过参阅网络上的相关文章,才发现问题出在PHP的时区设置上, ...

  8. springcloud+fastdfs在docker中设置防盗链

    docker容器中启动fastdfs tracker服务和storage服务 这里下载的是 delron/fastdfs 其中内置了nginx设置  进入storage容器里 /etc/fdfs/ht ...

  9. 在 docker 中设置容器自动启动

    1.使用 docker run 命令运行时 增加 --restart=always 参数即可 2.使用 docker-compose 命令运行时 在 yml 文件中,需要自启动的 service 下 ...

最新文章

  1. java·环境变量、基本数据类型
  2. 微信小程序之设置不同的顶部导航栏名称
  3. Poisson Image Editing 泊松融合 matlab代码完整
  4. [转]android 获取手机GSM/CDMA信号信息
  5. S​D​I​与​A​S​I 接口详解介绍
  6. ubuntu中pycharm无法输入汉字
  7. 我是怎么定义微服务平台?
  8. Zen coding
  9. TIA博途_如何更新程序中的指令版本和CPU固件版本?
  10. 后台管理进程GameMaster
  11. Unable to create tempDir. java.io.tmpdir is set to C:\Users\ADMINI~1\AppData
  12. REASON: Ambari Server java process has stopped. Please check the logs for more information.
  13. 手机怎么打开f12_如何使用浏览器的F12调试页面?
  14. 知识点滴 - X射线和伽马射线有什么区别?
  15. Ubuntu出现device not managed 如何解决?
  16. 统计学 计算机论文发表,数学科学学院博士生史册在统计学顶级期刊 《Annals of Statistics》上发表论文...
  17. Axure 9元件使用
  18. nvme固态硬盘安装win10填坑记
  19. QQ2011多开的实现
  20. 抖音账号和视频都没问题,为什么投放不了DOU+呢?丨国仁网络资讯

热门文章

  1. python课程表代码_Python课程表
  2. Axios实现zip文件下载
  3. 大数据公司挖掘数据价值的49个典型案例
  4. HDU 5664 Lady CA and the graph 二分,树分治
  5. Linux加法简单程序,Linux操作之——简单命令
  6. 计算机绘图说课视频,说课稿认识画图软件
  7. 2022中国人力资源管理年度观察
  8. Decision tree(决策树)算法初探
  9. Docker上部署SpringBoot项目并推送镜像到Docker Hub上---以MacOS为例
  10. 我们应当怎样做需求确认:快速原型法