docker 已经打包好镜像后如何修改时区

问题背景:

现在有一个已经打包好了的tar镜像文件,我需要在不重新用dockerfile构建的情况下修改好里面的时区,并且再次打包使用。

因为其实在内网环境下,通过基础镜像的时区来对齐是较为常见的。在构建时无法去获取那些时区包,或者把那些包丢到本地,较为麻烦。

解决思路:

一,看版本

不能盲目的尝试,需要知道你当前的linux版本

cat /etc/issue

我的是

然后需要根据你的linux版本去选择对应的调整时区的方法,说真的我一开始不知道linux,还想着根据centos或者ubuntu的方式来,然后想着使用centOS调整时区常用的timedatectl等工具,结果yum,apt了一下发现都用不了,才想到去查linux版本。。

二、改时区

1,在dockerfile里面更改,然后重新构建

因为问题背景,所以不考虑,但是因为其实改docker和在run后改,只是步骤上的差别,可以参考了之后实施。

2,在run后修改

这里构建时都需要添加tzdata包后做操作,这种东西直接参考官方文档是最佳的。

添加TZ环境变量的方法

#先创建run起来并且添加环境变量
docker run -e TZ=Asia/Shanghai -dit xxx:xxx
#进入镜像的shell
docker exec -it jolly_cerf  sh
#安装时区包
apk add tzdata
#退出
exit
#复制外部的时区文件
docker cp /usr/share/zoneinfo/Asia/Shanghai jolly_cerf:/etc/localtime
#
docker exec -it jolly_cerf  sh
#调整时区
echo ${TZ} > /etc/timezone
#已经成功转换
date

这种方法的结果,在删除tzdata包时会回退

将该镜像打包后,上传顶替原有镜像,然后不做任何操作创建容器,发现时间是对的,完成效果。

不添加环境变量的方法

dockerfile如下:

FROM alpine AS runtime
RUN apk add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo Asia/Shanghai > /etc/timezone && apk del tzdata

从dockerfile改成命令复现的,没成功

官方文档推荐方法

dockerfile如下:

FROM alpine AS runtime
ENV TZ Asia/Shanghai
RUN apk add alpine-conf && \
    /sbin/setup-timezone -z Asia/Shanghai && \
    apk del alpine-conf

我没配环境变量使用命令行,失败了。之后有空再试吧 

其他操作记录一下

# 上传镜像
docker load -i xxx.tar
# 查看现有镜像
docker images
# 查看现在在运行的容器
docker ps
# 查看所有的容器,包括exit的
docker ps -a
# 暂停,删除
docker stop xxx
docker rm xxx
#提交镜像到自己的镜像库 -a 是镜像的名字 obxxx 这个是docker生成容器时产生的随机名
docker commit -a "xxx" objective_shannon xxx:v6.0.4_0516
#保存镜像 -o 表示输出的文件
docker save -o xxx.tar xxx:v6.0.4_0516

reference:

效果是参考这位大佬的dockerfile来实现的:

https://www.cnblogs.com/flipped/p/15808681.html

其中参考的官方文档:

较老的方法:

j​​​​​​Setting the timezone - Alpine Linux

较新的方法: 

​​​​​​Alpine setup scripts - Alpine Linux

如果是centos系统更改时区:

https://blog.csdn.net/skh2015java/article/details/85007624

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值