提问者:小点点

如何更改docker容器中的时区?


我正在为我从docker-hub拉取的开发堆栈运行docker容器,该映像是为与我的应用程序应该部署的时区不同的时区创建的。

如何更改docker容器中的时区?

我试图通过运行来更改容器内的时区配置

echo "Africa/Lusaka" > /etc/timezone

并重新启动容器,但我仍然得到相同的时区。


共3个答案

匿名用户

您可以在运行阶段按照@LinPy的建议进行覆盖,但如果您想在Dockerfile上设置,您可以使用ENV进行设置,因为tzdata已经存在于您的基本映像中。

FROM postgres:10
ENV TZ="Africa/Lusaka"
RUN date

建立

docker build-t dbtest。

运行

docker run-it dbtest-c"date"

现在您可以通过运行DB验证

显示时区;

您将在容器和Postgres中看到中非时间

在高山基础映像中,环境变量将不起作用。您需要运行

 RUN ls /usr/share/zoneinfo && \
cp /usr/share/zoneinfo/Europe/Brussels /etc/localtime && \
echo "Africa/Lusaka" >  /etc/timezone && \

匿名用户

有几种方法可以做到这一点。

  1. 您可以在docker撰写文件中直接将时区声明为环境变量
   environment:
      - TZ=Asia/Singapore
      - DEBIAN_FRONTEND=noninteractive
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro

我个人更喜欢使用第二种方法,这样,我所有的容器都会和我的主机有相同的时间配置

匿名用户

只需将 /etc/localtime更改为 /usr/share/zoneinfo目录中的时区。

遵循以下步骤:

首先登录容器的bash:

docker exec -u 0 -it mycontainer bash

然后删除符号链接文件(/etc/localtime):

sudo rm -rf /etc/localtime

确定要配置的时区并为其创建符号链接:

例如,我想设置亚洲/德黑兰时区:

ln -s /usr/share/zoneinfo/Asia/Tehran /etc/localtime

现在通过以下方式验证它:

date

输出将是您的时区:

Sat Jan 30 14:22:17 +0330 2021