如何更改码头容器中的时区?

xoshrz7s  于 2022-10-23  发布在  Docker
关注(0)|答案(8)|浏览(158)

我正在为我从docker-Hub拉来的开发堆栈运行docker容器,映像是为不同的时区创建的,而不是我的应用程序应该部署的地方。
如何更改码头容器中的时区?
我尝试通过运行以下命令来更改容器中的时区配置

echo "Africa/Lusaka" > /etc/timezone

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

zyfwsgd6

zyfwsgd61#

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

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

建房
docker build -t dbtest .

docker run -it dbtest -c "date"
现在您可以通过运行以下命令在数据库端进行验证
show timezone;
您将在容器和postgres中看到Central Africa Time
在阿尔卑斯山基本图像中,环境变量将不起作用。你将需要运行

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

wqlqzqxt2#

有几种方法可以做到这一点。
1.您可以在docker合成文件中直接将时区声明为环境变量

environment:
      - TZ=Asia/Singapore
      - DEBIAN_FRONTEND=noninteractive

1.您可以在docker组成文件中Map容器的时区和本地时间文件以使用主机的时区和本地时间文件

volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro

我个人更喜欢使用第二种方法,通过这种方式,我的所有容器都将具有与我的主机相同的时间配置

5vf7fwbs

5vf7fwbs3#

只需在/usr/share/zoneinfo目录中将/etc/localtime更改为时区即可。
请执行以下步骤:
首先登录您容器的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
eqqqjvef

eqqqjvef4#

最好的方法是在你的跑步阶段使用ENV

-e TZ=Africa/Lusaka

并确保包tzdata存在于Container

yqlxgs2m

yqlxgs2m5#

更简单的方法是将env var添加到您的部署中:

env:
  - name: TZ
    value: "Europe/London"

(Kubernetes部署YAML)

s4chpxco

s4chpxco6#

如果TZ环境设置正确,但时间仍然错误,请确保安装了tzdata系统依赖项。

zlhcx6iw

zlhcx6iw7#

这个问题是关于Postgres基地的,我的问题是关于阿尔卑斯山基地的,但基于阿尔卑斯山维基,我能收集到的最佳实践意味着我的Dockerfile如下所示:

FROM alpine:3.14
RUN apk add --no-cache alpine-conf && \
    setup-timezone -z Europe/London

Https://wiki.alpinelinux.org/wiki/Alpine_setup_scripts#setup-timezone

a7qyws3x

a7qyws3x8#

使用

ls /usr/share/zoneinfo/

显示所有分区的步骤

相关问题