Skip to content

Docker容器内时区设置

更新: 11/16/2024 字数: 0 字 时长: 0 分钟

部署容器时,容器内默认时区为0时区,而有些时候需要国内+8区。

可以使用使用data指令查看时区, CST为+8区,UTC为0时区

已创建镜像

方法一:容器内修改

进入容器后可也是用 tzselect,进行修改。

注意: 有些应用启动时时区已经确定。修改相当于更改容器内部的linux时区,有时还需要修改应用程序的配置。

bash
shell
docker exec -it 容器id /bin/bash # 进入容器
tzselect #根据提示修改

方法二:宿主机修改

将宿主机时区文件复制到容器内,然后软连接。

注意: 有些应用启动时时区已经确定。修改相当于更改容器内部的linux时区,有时还需要修改应用程序的配置。

bash
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参数,需要确定容器是否支持

bash
shell
docker run ...  -e TZ="Asia/Shanghai" ....

Dockerfile

本质是在Docker容器构建时之间修改linux时区内容

方法一(推荐优先尝试)

Dockerfile
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
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/*