Cho*_*key 221 timezone date docker
Docker 容器从哪里获取时间信息?我已经从基本的 ubuntu:trusty 映像创建了一些容器,当我运行它并请求“日期”时,我得到了 UTC 时间。
有一段时间我通过在我的 Dockerfile 中执行以下操作来解决这个问题:
RUN sudo echo "America/Los_Angeles" > /etc/timezone
Run Code Online (Sandbox Code Playgroud)
但是,由于某种原因停止工作。在网上搜索我看到以下建议:
docker run -v /etc/timezone:/etc/timezone [image-name]
Run Code Online (Sandbox Code Playgroud)
不过,这两种方法都正确设置了时区!
$ cat /etc/timezone
America/Los_Angeles
$ date
Tue Apr 14 23:46:51 UTC 2015
Run Code Online (Sandbox Code Playgroud)
有谁知道是什么给的?
Mic*_*ton 327
这里的秘密是dpkg-reconfigure tzdata
简单地创建/etc/localtime
为/usr/share/zoneinfo
. 因此,完全可以从您的 Dockerfile 中执行此操作。考虑:
ENV TZ=America/Los_Angeles
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
Run Code Online (Sandbox Code Playgroud)
作为奖励,TZ 也将在容器中正确设置。
这也是与发行版无关的,因此它几乎适用于任何 Linux。
注意:如果您使用的是基于 alpine 的映像,则必须安装第tzdata
一个。(在此处查看此问题)
看起来像这样:
RUN apk add --no-cache tzdata
ENV TZ America/Los_Angeles
Run Code Online (Sandbox Code Playgroud)
Vic*_*los 102
通常在 docker 容器中设置一个环境变量就足够了,如下所示:
docker run -e TZ=Europe/Amsterdam debian:jessie date
Run Code Online (Sandbox Code Playgroud)
当然,这也适用于docker-compose
.
小智 32
您可以将本地文件(/etc/timezone 和 /etc/localtime)添加为 docker-container 中的卷。
docker-compose.yml
使用以下几行更新您的。
volumes:
- "/etc/timezone:/etc/timezone:ro"
- "/etc/localtime:/etc/localtime:ro"
Run Code Online (Sandbox Code Playgroud)
现在容器时间与主机上的相同
Von*_*onC 22
安装/etc/localtime
在图像中,因此与它同步host -v
是最流行的一种。
但请参阅问题 12084:
这是不正确的,因为当软件需要
/etc/timezone
设置文件时它不起作用。
您使用的这种方式将其保留为默认值etc/UTC
。我已经确定实际上没有万无一失的优雅方式来设置 docker 容器内的时区。
所以最终确定了这个解决方案:应用泊坞窗文件:
# Relocate the timezone file
RUN mkdir -p /config/etc && mv /etc/timezone /config/etc/ && ln -s /config/etc/timezone /etc/
Run Code Online (Sandbox Code Playgroud)
应用程序入口点脚本:
# Set timezone as specified in /config/etc/timezone
dpkg-reconfigure -f noninteractive tzdata
Run Code Online (Sandbox Code Playgroud)
数据量
/config
dockerfile,本地化到特定国家或地区:
# Set the time zone
RUN echo "Europe/London" > /config/etc/timezone
Run Code Online (Sandbox Code Playgroud)
...这并不优雅,因为涉及 3 个单独的文件,并
/etc/localtime
在每个运行时容器启动时重新创建。这是比较浪费的。但是它确实可以正常工作,并成功地实现了基本应用程序映像和每个国家/地区的本地化配置之间的分离。
在 3 行代码中。
小智 17
在 ubuntu 16.04 映像中存在错误。解决方案是
ENV TZ 'Europe/Tallinn'
RUN echo $TZ > /etc/timezone && \
apt-get update && apt-get install -y tzdata && \
rm /etc/localtime && \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
dpkg-reconfigure -f noninteractive tzdata && \
apt-get clean
Run Code Online (Sandbox Code Playgroud)
如果您使用基于以下内容的 docker 映像ubuntu
:
# Change the docker default timezone from UTC to SGT
echo "Asia/Singapore" > /etc/timezone
dpkg-reconfigure tzdata
date
Run Code Online (Sandbox Code Playgroud)
小智 5
在这里添加我的两分钱,因为我已经尝试了其中的几种,但没有一个适用于基于高山的图像。
然而,这却成功了:
ENV TZ=America/Toronto
RUN apk update
RUN apk upgrade
RUN apk add ca-certificates && update-ca-certificates
RUN apk add --update tzdata
RUN rm -rf /var/cache/apk/*
Run Code Online (Sandbox Code Playgroud)
[来源]
归档时间: |
|
查看次数: |
415601 次 |
最近记录: |