dockerfile ubuntu镜像设置时区错误解决

只针对ubuntu

之前打镜像时 都是直接在dockerfile 里进行设置 /etc/timezone and /etc/localtime,
打完镜像后,验证测试过业务服务,但是压根没有去验证时间是否正确,这是个不好的行为,还好也没有对业务影响太大,只是对产出日志的时间有2个小时的差距,算是不幸中的万幸吧。

之前的dockerfiel

FROM ubuntu:18.04
RUN set -x \
    && ln -sf /usr/share/zoneinfo/Europe/Amsterdam  /etc/localtime \
    && echo "Europe/Amsterdam" > /etc/timezone \

问题发现

启动刚打好的镜像,登录镜像

发现 /etc/timezone 是已经修改对了

cat /etc/timezone 
Europe/Amsterdam

但是 /etc/localtime 显示的是红的

在这里插入图片描述

查看目录提示没有这个目录或文件

root@b033681f4cc2:~# ls /usr/share/zonifo
ls: cannot access '/usr/share/zonifo': No such file or directory
我郁闷了,发现ubuntu:18.04 镜像里压根没有安装 `tzdata`,只能自行安装哈。

解决问题

安装tzdata 有2种方式

tzdata 2018版本开始(如2018d),安装过程中默认采用交互式,即要求输入指定的Geographic area和Time zone,从而必须人工值守进行安装

这个我们在dockerfile 种肯定不想人工去选择赛,上网搜索了一下相关资料,发现挺简单的提前设置 export DEBIAN_FRONTEND=noninteractive 就好

新版 apt方式

FROM ubuntu:18.04
RUN set -x \
    && export DEBIAN_FRONTEND=noninteractive \
    && apt-get update \
    && apt-get install -y tzdata \
    && ln -sf /usr/share/zoneinfo/Europe/Amsterdam  /etc/localtime \
    && echo "Europe/Amsterdam" > /etc/timezone \
    && rm -rf /var/lib/apt/lists/*

新版 dpkg方式

需要提前准备 deb 软件包. 
apt-get update 
#进行授权,不然下载*.deb 会报错
mkdir -p dpkg && chown _apt dpkg
apt-get download tzdata
FROM ubuntu:18.04
COPY dpkg/tzdata_2021a-0ubuntu0.18.04_all.deb /opt
RUN set -x \
    && export DEBIAN_FRONTEND=noninteractive \
    && dpkg -i /opt/tzdata_2021a-0ubuntu0.18.04_all.deb \
    && ln -sf /usr/share/zoneinfo/Europe/Amsterdam  /etc/localtime \
    && echo "Europe/Amsterdam" > /etc/timezone \
    && dpkg-reconfigure --frontend noninteractive tzdata \

镜像build 完毕后,执行 run 和exec 进入容器,查看 /etc/localtime

在这里插入图片描述
问题解决.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值