论如何用一行命令安装和配置好 tzdata

前言

这些天花了点时间把 blog 迁移到了 docker 上,中间在使用 docker build 制作镜像时遇到了 tzdata 软件包难以配置的问题。tzdata 在安装时会弹出一堆选择大洲、地点以确定时区的选项,但是这是在制作 docker 镜像,我们没办法像平时那样输入数字(或者名称)进行选择,这会导致这整个过程被跳过(它认为你输入了无效选项),然后时区变为 UTC + 0,更有甚者直接卡在那里不动了。。。

Please select the geographic area in which you live. Subsequent configuration
questions will narrow this down by presenting a list of cities, representing
the time zones in which they are located.

  1. Africa   3. Antarctica  5. Arctic  7. Atlantic  9. Indian    11. US
  2. America  4. Australia   6. Asia    8. Europe    10. Pacific  12. Etc
Geographic area: 
Use of uninitialized value $_[1] in join or string at /usr/share/perl5/Debconf/DbDriver/Stack.pm line 111.

Current default time zone: '/UTC'

网上的解决方案

https://serverfault.com/questions/949991/how-to-install-tzdata-on-a-ubuntu-docker-image

嗯,怎么说呢,没一个能用的😂,可能是因为这是一个三年前的问题。
网上的答案都是清一色的类似:

  • 先使用 DEBIAN_FRONTEND=noninteractive 环境变量跳过安装时的配置 (这个确实能跳过)
  • 可以使用类似 TZ=Asia/Shanghai 的环境变量来让它自动配置 (这个完全没有效果,还是卡在 UTC+0 )
  • 可以 ln -fs /usr/share/zoneinfo/Asian/Shanghai /etc/localtime 之后 dpkg-reconfigure (这个也不行,卡在 UTC+0)

优雅的解决

有没有一种可能,我们可以不需要这些软件包“开后门”,直接装作自己是 interactive shell 把选项输进去完事?
这玩意儿不就是读的 stdin 么,直接塞进去一个好了。
那 echo "Asia\nShanghai" | apt-get install -y tzdata ?
欸嘿,还真就直接搞定了。。。

试了 ubuntu 20.04 与 22.04 的 docker 镜像,执行这一过程都没有任何问题。
当然,最好单装 tzdata 软件包,一堆软件包一起装鬼知道输进去的东西会不会被啥吞了。

免责声明:
1.本站所有内容由本站原创、网络转载、消息撰写、网友投稿等几部分组成。
2.本站原创文字内容若未经特别声明,则遵循协议CC3.0共享协议,转载请务必注明原文链接。
3.本站部分来源于网络转载的文章信息是出于传递更多信息之目的,不意味着赞同其观点。
4.本站所有源码与软件均为原作者提供,仅供学习和研究使用。
5.如您对本网站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。
火焰兔 » 论如何用一行命令安装和配置好 tzdata