docker registry镜像容器时区时间同步

  docker registry镜像2.5/2.6版本均基于alpine:3.4制作。若想进入容器可使用 docker exec -it [容器ID等] /bin/sh。

  Alpine Linux Docker镜像基于Alpine Linux操作系统,后者是一个面向安全的轻型Linux发行版。不同于通常Linux发行版,Alpine Linux采用了musl libc和busybox以减小系统的体积和运行时资源消耗。在保持瘦身的同时,Alpine Linux还提供了自己的包管理工具apk。Alpine Linux Docker镜像也继承了Alpine Linux发行版的这些优势。相比于其他Docker镜像,它的容量非常小,仅仅只有5M,且拥有非常友好的包管理器。有消息说Docker官方镜像将会使用Alpine Linux替换Ubuntu。需要注意的是 Alpine Linux使用了musl,可能和其他Linux发行版使用的glibc实现会有些不同,而且musl实现的DNS服务不会使用resolv.conf文件中的search和domain两个配置,通过DNS来进行服务发现时需要注意。

  Alpine Linux Docker镜像中默认是不带时区相关的命令及文件的,需要安装额外的包tzdate来支持。

方法一 容器内部时区同步

  # docker ps -a                 //查看registry镜像容器Id

    CONTAINERID IMAGE   COMMAND       CREATED     STATUS    PORTS         NAMES

    fc05bb235d29  registry:2   "/entrypoint.sh /etc/"   10 weeks ago    Up 8 weeks   0.0.0.0:5000->5000/tcp   registry-srv

  # docker exec -it  fc05bb235d29   /bin/sh  //进入容器内部,alpine系统使用/bin/sh

  ~ # apk add --no-cache tzdata          //安装时区相关包

  ~ # echo "Asiz/Shanghai" > /etc/timezone

  ~ # ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  ~ # date
    Mon Aug 28 15:45:37 CST 2017

方法二 dockerfile修改 镜像构建

1 修改dockerfile

  #定义环境变量

  ENV  TIME_ZONE Asia/Shanghai
  #dockerfile增加命令
  RUN apk add --no-cache tzdata   //安装tzdata安装包

    && echo "${TIME_ZONE}" > /etc/timezone    //设置时区
    && ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime 

2 宿主机时区及时间检查

检查宿主机时间及时间是否正确,使用以下命令:

[root@docker ~]# timedatectl
      Local time: Tue 2016-12-13 21:52:13 EST
  Universal time: Wed 2016-12-14 02:52:13 UTC
        RTC time: Wed 2016-12-14 02:52:13
      Time zone: America/New_York (EST, -0500)  //默认为西五区
    NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
      DST active: no
Last DST change: DST ended at
                  Sun 2016-11-06 01:59:59 EDT
                  Sun 2016-11-06 01:00:00 EST
Next DST change: DST begins (the clock jumps one hour forward) at
                  Sun 2017-03-12 01:59:59 EST
                  Sun 2017-03-12 03:00:00 EDT
#修改为东八区
[root@docker ~]# timedatectl set-timezone Asia/Shanghai
 Local time: Wed 2016-12-14 10:53:10 CST
  Universal time: Wed 2016-12-14 02:53:10 UTC
        RTC time: Wed 2016-12-14 02:53:10
      Time zone: Asia/Shanghai (CST, +0800)
    NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
      DST active: n/a
[root@docker ~]# date
Wed Dec 14 10:53:49 CST 2016
#调整时间
[root@docker ~]# date -s "2016-12-13 21:54:20"
#时间同步,不执行则无法生效
[root@docker ~]# clock -w 
[root@docker ~]# timedatectl
      Local time: Tue 2016-12-13 22:59:44 CST
  Universal time: Tue 2016-12-13 14:59:44 UTC
        RTC time: Tue 2016-12-13 14:59:44
      Time zone: Asia/Shanghai (CST, +0800)
    NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
      DST active: n/a
```

至此宿主机时区及时间调整完毕。

参考文件:Docker系列之(三):Docker微容器Alpine Linux

     解决Docker容器时区及时间不同步问题

原文地址:https://www.cnblogs.com/doclove/p/7444426.html