mek*_*oke 20 timezone docker devops
我正在为我从 docker-hub 中提取的开发堆栈运行 docker 容器,该图像是为与我的应用程序应该部署的时区不同的时区创建的。
如何更改 docker 容器中的时区?
我试图通过运行来更改容器内的时区配置
echo "Africa/Lusaka" > /etc/timezone
Run Code Online (Sandbox Code Playgroud)
并重新启动容器,但我仍然得到相同的时区。
rug*_*312 70
有几种方法可以做到这一点。
Run Code Online (Sandbox Code Playgroud)environment: - TZ=Asia/Singapore - DEBIAN_FRONTEND=noninteractive
Run Code Online (Sandbox Code Playgroud)volumes: - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro
我个人更喜欢使用第二种方法,这样我的所有容器都将具有与我的主机相同的时间配置
Adi*_*iii 28
您可以在运行阶段按照@LinPy 的建议进行覆盖,但是如果您想在 Dockerfile 中进行设置,您可以使用 ENV 进行设置,因为 tzdata 已经存在于您的基础映像中。
FROM postgres:10
ENV TZ="Africa/Lusaka"
RUN date
Run Code Online (Sandbox Code Playgroud)
建造
docker build -t dbtest .
跑
docker run -it dbtest -c "date"
现在您可以通过运行在数据库端进行验证
show timezone;
您将Central Africa Time在容器和 Postgres 中看到
在 alpine 基础映像中,环境变量将不起作用。你需要运行
RUN ls /usr/share/zoneinfo && \
cp /usr/share/zoneinfo/Europe/Brussels /etc/localtime && \
echo "Africa/Lusaka" > /etc/timezone && \
Run Code Online (Sandbox Code Playgroud)
Lin*_*nPy 13
最好的方法是ENV在你的运行阶段使用
-e TZ=Africa/Lusaka
Run Code Online (Sandbox Code Playgroud)
并确保包裹tzdata存在于Container
小智 5
一个更简单的方法是将环境变量添加到您的部署中:
env:
- name: TZ
value: "Europe/London"
Run Code Online (Sandbox Code Playgroud)
(kubernetes部署yaml)
只需将 /etc/localtime 更改为 /usr/share/zoneinfo 目录中的时区。
按着这些次序:
首先登录到容器的 bash:
docker exec -u 0 -it mycontainer bash
Run Code Online (Sandbox Code Playgroud)
然后删除符号链接文件(/etc/localtime):
sudo rm -rf /etc/localtime
Run Code Online (Sandbox Code Playgroud)
确定要配置的时区并为其创建符号链接:
例如,我想设置亚洲/德黑兰时区:
ln -s /usr/share/zoneinfo/Asia/Tehran /etc/localtime
Run Code Online (Sandbox Code Playgroud)
现在通过以下方式验证:
date
Run Code Online (Sandbox Code Playgroud)
输出将是您的时区:
Sat Jan 30 14:22:17 +0330 2021
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41736 次 |
| 最近记录: |