码头工人容器是否会自动与其主机同步时间



我需要 docker 容器内的 NTP 服务器来定期同步时间,还是容器会与其主机重新同步时间?已正确设置 docker 容器时区。

如果您在运行 boot2docker 的 OSX 上,请参阅此问题:https://github.com/boot2docker/boot2docker/issues/290

时间同步成为一个问题,因为 boot2docker 主机在您的操作系统处于睡眠状态时会出现时间漂移。与 docker 容器的时间同步无法通过使用 -v /etc/localtime:/etc/localtime:ro 运行容器来解决

相反,现在,您必须定期在OSX上运行它:

/usr/local/bin/boot2docker ssh sudo ntpclient -s -h pool.ntp.org

Kitematic 用户更新

如果您正在运行Kitematic,这是现在在OSX中启动和运行Docker的建议机制,则必须定期运行以下命令:

docker-machine ssh default 'sudo ntpclient -s -h pool.ntp.org'

或者,对于旧版本的 docker

docker-machine ssh dev 'sudo ntpclient -s -h pool.ntp.org'

针对新的本机 Docker for OSX 用户的更新

新的Docker

Beta取消了VirtualBox和Docker Machine。最新版本的docker(目前是1.12.1-beta25(内部版本:11807))似乎能够检测何时出现时间不连续并做出相应调整。因此,这应该不再是一个问题...万岁!!

https://github.com/sameersbn/docker-gitlab/issues/77

参见萨米尔斯本的答案。

option 1: -v /etc/localtime:/etc/localtime:ro
option 2: -e "TZ=Asia/Shanghai"

最简单的解决方案似乎是使用 -v /etc/localtime:/etc/localtime:ro 选项运行容器。因此:

#run without tz info:
docker run --rm -t -i ubuntu date
Wed Apr  2 18:40:07 UTC 2014
# run with tz info:
docker run --rm -t -i -v /etc/localtime:/etc/localtime:ro ubuntu date
Wed Apr  2 11:40:29 PDT 2014

在 Docker for Mac OS X Beta 上,我在基于 Alpine Linux 的 VM 上遇到了明显的漂移。在 Alpine Linux FAQ 中,您可以使用以下命令同步 VM 的时钟。

ntpd -d -q -n -p pool.ntp.org

但是,访问 VM 上的终端是另一个问题,如果使用 screen 命令,则可以完成。

screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty

该路径是一个符号链接,在我的系统上指向 /dev/ttys003 .

进入后,请注意moby login只是root没有密码。完成后,CTRL-A、D 将与屏幕会话断开连接。

注意:这曾经记录在 Docker for Mac 故障排除中,但似乎已被删除。我很幸运能在 Dockercon 2016 上看到它。Docker似乎试图将VM完全从体验中抽象出来,这解释了为什么它不再被记录下来。

docker 上 osx 时间漂移的当前解决方案(2018 年 4 月):

我确实在 NTP 服务器上安装了我的 Mac,但这种固定时钟与容器的漂移:

从 https://docs.docker.com/docker-for-mac/troubleshoot/#known-issues :

如果您的系统无法访问 NTP 服务器,则在休眠后,Docker for Mac 看到的时间可能与主机严重不同步。此外,在使用过程中,时间可能会慢慢不同步。要在休眠后手动重置时间,请运行:

docker run --rm --privileged alpine hwclock -s

或者,要解决这两个问题,您可以将本地时钟添加为主机的低优先级(高层)回退 NTP 时间源。为此,请编辑主机的/etc/ntp-restrict.conf 以添加:

server 127.127.1.1              # LCL, local clock
fudge  127.127.1.1 stratum 12   # increase stratum

然后使用以下命令重新启动 NTP 服务:

sudo launchctl unload /System/Library/LaunchDaemons/org.ntp.ntpd.plist
sudo launchctl load /System/Library/LaunchDaemons/org.ntp.ntpd.plist

docker-compose 用法:

/etc/localtime:/etc/localtime:ro添加到volumes属性。

查看此链接以演示示例。

如果您

更喜欢TZ解决方案,那么尽管您请求自己的时区(目前是 11:09 CDT),但您可能会惊讶地看到显示 UTC 时间:

$ docker run --rm -it -e "TZ=America/Chicago" ubuntu date
Mon Oct 26 16:09:04 America 2020

实验上,您似乎需要POSIX TZ格式:

$ docker run --rm -it -e "TZ=CST6CDT" ubuntu date
Mon Oct 26 11:09:17 CDT 2020

最新更新