我正在为我从docker-hub拉取的开发堆栈运行docker容器,该映像是为与我的应用程序应该部署的时区不同的时区创建的。
如何更改docker容器中的时区?
我试图通过运行来更改容器内的时区配置
echo "Africa/Lusaka" > /etc/timezone
并重新启动容器,但我仍然得到相同的时区。
您可以在运行阶段按照@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 && \
有几种方法可以做到这一点。
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