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)
有谁知道是什么给的?
我在 Dockerfile 中有以下行。
RUN apt-get install -y tzdata
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它会询问我的输入。在我提供输入后,它挂在那里。有谁知道如何解决这个问题?
Step 25/25 : RUN apt-get install -y tzdata
---> Running in ee47a1beff84
Reading package lists...
Building dependency tree...
Reading state information...
The following NEW packages will be installed:
tzdata
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 189 kB of archives.
After this operation, 3104 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 tzdata all 2018i-0ubuntu0.18.04 [189 kB]
debconf: unable …
Run Code Online (Sandbox Code Playgroud) 我正在使用 puppet 来管理一组 debian 服务器。我需要更改集群上每台机器的时区。执行此操作的正确 debian 方法是使用dpkg-reconfigure tzdata
. 但是如果我使用对话框,我似乎只能改变它。有什么方法可以从 shell 自动执行此操作,以便我可以编写一个 Exec 来简化此操作?
如果没有,我认为下一个最好的方法可能是让 puppet 分发/etc/timezone
并/etc/localtime
在整个集群中使用正确的数据。
任何输入表示赞赏!
这是我的date
命令的输出:
[root@r1304 ~]# date
Wed Apr 18 15:43:28 GST 2012
Run Code Online (Sandbox Code Playgroud)
我想将默认系统时区更改为亚洲/迪拜。我按照教程做了这个:
ln -sf /usr/share/zoneinfo/Asia/Dubai /etc/localtime
Run Code Online (Sandbox Code Playgroud)
但是没有效果。似乎这在 CentOS 6 中的做法有所不同。如何更改时区?
我猜我的 PHP 时间和服务器时间之间存在差异。
当我在 PHP 中检查当前时间时,它显示正在使用 MST。但是,cron 作业没有在正确的时间运行。
如何检查服务器本身使用的时区,而不是 PHP 设置使用的时区?
我正在编写脚本来自动设置新的 slicehost 安装。在一个完美的世界中,在我启动脚本后,它会运行,而不会引起我的注意。我成功了,只有一个例外。
我如何设置时区,永久(重新启动后幸存)和理智(调整标准和夏令时,所以不只是强制日期)......不需要我输入的方式?
目前,我正在使用
dpkg-reconfigure tzdata
Run Code Online (Sandbox Code Playgroud)
这似乎没有任何方法可以强制参数进入它。它需要用户输入。
编辑:我在这里编辑,而不是评论,因为评论似乎不允许代码块。
这是我最终得到的实际代码,基于下面 Rudedog 的评论。我还注意到这不会更新 /etc/timezone.conf 。我不确定谁在使用它,但如果有人使用它,我也会设置它。
TIMEZONE="America/Los_Angeles"
echo $TIMEZONE > /etc/timezone
cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime # This sets the time
Run Code Online (Sandbox Code Playgroud) 我想在 EST 中安排我的任务,但我希望实际任务在默认系统时区下运行。
这样做的最佳方法是什么?
尽管整个系统是“欧洲/维也纳”,但我有几个 PostgreSQL 9.2 安装,其中 PostgreSQL 使用的时区是 GMT。我反复检查postgresql.conf
也未包含timezone
的设置,所以要根据它应该退回到系统的时区的文档。
然而,
# su -s /bin/bash postgres -c "psql mydb"
mydb=# show timezone;
TimeZone
----------
GMT
(1 row)
mydb=# select now();
now
-------------------------------
2013-11-12 08:14:21.697622+00
(1 row)
Run Code Online (Sandbox Code Playgroud)
任何提示,格林威治标准时间时区可能来自哪里?系统用户没有TZ
设置/etc/timezone
并且/etc/timeinfo
似乎配置正确。
# cat /etc/timezone
Europe/Vienna
# date
Tue Nov 12 09:15:42 CET 2013
Run Code Online (Sandbox Code Playgroud)
任何提示表示赞赏,提前致谢!
列出可用时区显示“UTC”
$ timedatectl list-timezones
UTC
Run Code Online (Sandbox Code Playgroud)
将其设置为 UTC 失败,声称 UTC 是“无效的”。
$ timedatectl set-timezone UTC
Failed to set time zone: Invalid time zone 'UTC'
Run Code Online (Sandbox Code Playgroud)
这是在 Ubuntu 19.10(谷歌云)上
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 19.10
Release: 19.10
Codename: eoan
Run Code Online (Sandbox Code Playgroud)
为什么这会失败?
我在 debian 上安装了 Jenkins-ci。
当前默认时区:“美国/多伦多” 当地时间现在是:2012 年 7 月 9 日星期一 16:00:57 EDT。 现在的世界时间是:2012 年 7 月 9 日星期一 20:00:57 UTC。
在 /etc/default/rcS 文件中,我有:
UTC=否
不幸的是,这不起作用,在詹金斯的系统信息中:
user.timezone 等/UTC
我搜索了几个小时......不幸的是找不到修复任何帮助将不胜感激。
感谢您的时间