Docker容器内时区设置
更新: 11/16/2024 字数: 0 字 时长: 0 分钟
部署容器时,容器内默认时区为0时区,而有些时候需要国内+8区。
可以使用使用data
指令查看时区, CST为+8区,UTC为0时区
已创建镜像
方法一:容器内修改
进入容器后可也是用 tzselect
,进行修改。
注意: 有些应用启动时时区已经确定。修改相当于更改容器内部的linux时区,有时还需要修改应用程序的配置。
shell
docker exec -it 容器id /bin/bash # 进入容器
tzselect #根据提示修改
方法二:宿主机修改
将宿主机时区文件复制到容器内,然后软连接。
注意: 有些应用启动时时区已经确定。修改相当于更改容器内部的linux时区,有时还需要修改应用程序的配置。
shell
# 将其他容器的Asia文件夹复制到docker虚拟机环境中
docker cp 容器名:/usr/share/zoneinfo/Asia/ /usr/share/zoneinfo
# 然后时区指定
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
Docker run
默认可以在 docker run 指令中添加参数TZ
,部分镜像会自定义时区参数,需要查看官方文档或者Dockerfile
注意: 有些应用的dockerfile中会重置TZ参数,有时参数会失效,或者容器内不支持TZ参数,需要确定容器是否支持
shell
docker run ... -e TZ="Asia/Shanghai" ....
Dockerfile
本质是在Docker容器构建时之间修改linux时区内容
方法一(推荐优先尝试)
Dockerfile
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
方法二
方法一失败后再使用方法二!!!
在方法一基础上加入了tzdata
的安装(不同发行版linux需要修改为对应的软件包指令)。方法二存在更新软件包和安装的时间,并且部分安装器在国内还需要修改代理,经测试在网络良好的情况下打包Go(Gin)大约比方法一多花费10~30s。
Dockerfile
ENV TZ=Asia/Shanghai \
DEBIAN_FRONTEND=noninteractive
RUN apt update \
&& apt install -y tzdata \
&& ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \
&& echo ${TZ} > /etc/timezone \
&& dpkg-reconfigure --frontend noninteractive tzdata \
&& rm -rf /var/lib/apt/lists/*