docker容器会与主机自动同步吗?

van*_*ntt 99 time timezone clock ntp docker

我已经正确更改了docker容器的时区.我是否需要在docker容器中安装NTP服务器以定期同步时间,否则容器将从主机同步时间?

esi*_*ver 102

如果您在OSX上运行boot2docker,请参阅此问题: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
Run Code Online (Sandbox Code Playgroud)

Kitematic用户的更新

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

docker-machine ssh default 'sudo ntpclient -s -h pool.ntp.org'
Run Code Online (Sandbox Code Playgroud)

或者,对于较旧版本的docker

docker-machine ssh dev 'sudo ntpclient -s -h pool.ntp.org'
Run Code Online (Sandbox Code Playgroud)

用于OSX的新原生Docker用户的更新

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

  • 请注意,对于Docker for OSX Beta,重新启动容器对我没有用,也没有重新创建它.相反,我不得不重新启动Docker(从菜单栏图标). (7认同)

小智 48

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

见sameersbn的回答.

option 1: -v /etc/localtime:/etc/localtime:ro
option 2: -e "TZ=Asia/Shanghai"
Run Code Online (Sandbox Code Playgroud)

  • 选项2为我工作.我其实喜欢它比其他选项更明确. (2认同)
  • -e"TZ = XXXX/YYYY"就像MAGIC一样! (2认同)

sha*_*hef 45

最简单的解决方案似乎是使用该-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
Run Code Online (Sandbox Code Playgroud)

  • 我不知道原始问题是否更多关于时区(例如确保容器将遵守DST和时区变化)或准确的时间保持(例如确保容器时钟不会漂移).如果是时区,那么答案是完美的.如果它是关于时钟漂移的,你不必担心:容器的时钟与主机的时钟相同(除了容器不能改变它,除非它在`--privileged`模式下运行). (24认同)

Mar*_*lme 25

在适用于Mac OS X Beta的Docker上,我在VM上经历了很大的变化,它基于Alpine Linux.从Alpine Linux FAQ中,您可以使用以下命令同步VM的时钟.

ntpd -d -q -n -p pool.ntp.org
Run Code Online (Sandbox Code Playgroud)

但是,访问VM上的终端是另一个问题,如果使用screen命令可以执行此操作.

screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
Run Code Online (Sandbox Code Playgroud)

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

一旦你得到的,注意,moby login是根本root没有密码.完成后,CTRL-A,D将断开与屏幕会话的连接.

注意:这曾经记录在Docker for Mac Trouble Shooting上,但似乎已被删除.我很幸运能够在2016年的Dockercon上展示它.似乎Docker试图将VM完全抽象出来,这就解释了为什么它不再被记录下来了.

  • 对于使用新RC而没有间歇式泊坞机的人来说,这应该是新接受的答案 (3认同)