赞
踩
之前打镜像时 都是直接在dockerfile 里进行设置
/etc/timezone
and/etc/localtime
,
打完镜像后,验证测试过业务服务,但是压根没有去验证时间是否正确,这是个不好的行为,还好也没有对业务影响太大,只是对产出日志的时间有2个小时的差距,算是不幸中的万幸吧。
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
就好
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/*
需要提前准备 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
问题解决.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。