Docker Community Forums

Share and learn in the Docker community.

Docker for Windows should resync VM time when computer resumes from sleep

In my mind this is a critical bug, I am forced to restart docker several times during the day.

3 Likes

Is there a bug open for this? Still happening on .1.12.3 (build 7135). Makes docker really annoying to use on laptops (every coffee break means restarting docker?)

In my case it’s off by a few days…

$ docker run -t node date
Fri Oct 21 09:51:09 UTC 2016

$ docker run -t centos date
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
8d30e94188e7: Pulling fs layer
8d30e94188e7: Verifying Checksum
8d30e94188e7: Download complete
8d30e94188e7: Pull complete
Digest: sha256:2ae0d2c881c7123870114fb9cc7afabd1e31f9888dac8286884f6cf59373ed9b
Status: Downloaded newer image for centos:latest
Fri Oct 21 09:52:56 UTC 2016

$ date
Tue, Oct 25, 2016  6:02:56 PM

$ docker run -t centos date
Fri Oct 21 09:53:07 UTC 2016

$ date
Tue, Oct 25, 2016  6:03:04 PM

$ docker run -t node date
Fri Oct 21 09:53:17 UTC 2016

$ date
Tue, Oct 25, 2016  6:03:11 PM

we can set the date of MobyLinuxVM manually using How can I SSH into the Beta's MobyLinuxVM

docker run --net=host --ipc=host --uts=host --pid=host -it --security-opt=seccomp=unconfined --privileged --rm alpine /bin/sh

/ # hostname
moby
/ # id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
/ # date -s '2016-10-25 03:33:21'
Tue Oct 25 03:33:21 UTC 2016
/ # date
Tue Oct 25 03:33:23 UTC 2016
/ #

then if we check again from a docker container:

$ docker run -t node date
Tue Oct 25 03:36:44 UTC 2016
$ date -u
Tue, Oct 25, 2016  3:36:49 PM

so I used the following command from cygwin to quickly sync the time of the MobyLinuxVM with the windows host:

$ docker run --net=host --ipc=host --uts=host --pid=host --security-opt=seccomp=unconfined --privileged --rm alpine date -s "`date -u '+%Y-%m-%d %H:%M:%S'`"
Tue Oct 25 15:49:57 UTC 2016

# check the time again
$ docker run -t node date '+%Y-%m-%d %H:%M:%S'; date -u '+%Y-%m-%d %H:%M:%S'
2016-10-25 15:50:36
2016-10-25 15:50:37
2 Likes

Any update on this? I have to restart docker every morning to get the time correct.

I’m using @cristualexandru solution to update the time in the container every time I unlock my computer.

Prerequisites (There should be a possibility for most operating systems):

  • Windows 10 (or a possibility to start a command at login)
  • Installed “bash” (Cygwin or similar) environment installed
  1. Create a file “docker-sync-time.bat” with the following content:

    @echo off

    echo Syncing docker container time…
    bash -c “docker run --net=host --ipc=host --uts=host --pid=host --security-opt=seccomp=unconfined --privileged --rm alpine date -s “$(date -u ‘+%%Y-%%m-%%d %%H:%%M:%%S’)””

  2. Start “Task Scheduler”

  3. Add a task (“Task Scheduler Library” -> “Create New Task…”) that starts the batch script every time you login

2 Likes

I use ntp with all my other hyper-v VMs. But, if the time offset is more than 1000s (which always happens after a resume) then ntp refuses to sync the time. But, adding “tinker panic 0” to /etc/ntp.conf allows ntp sync with any offset. I am not sure what the security implications are for this, but it seams to work fine for me. I would suggest including ntp in the Moby VM image with “tinker panic 0”

Hey :slight_smile:

A quick fix for those who need to restart Docker for Windows every single morning after sleep is:

docker run -it --pid host --privileged --rm debian nsenter -i -m -n -t 1 service ntpd start```

Notice ntpd can take up to 1024 seconds in order to update a container out of sync.

Best regards,
Rúben

I get this error when executing “get-vm | set-vm -automaticstopaction save”

set-vm : "MobyLinuxVM": Fehler beim Ändern der Einstellungen.

Unerwarteter Fehler: Allgemeiner Fehler (0x80041001).
“MobyLinuxVM”: Fehler beim Ändern der Einstellungen (ID des virtuellen Computers 51BAF990-F1CC-4F25-AB94-A3B7E4B5896C).
MobyLinuxVM: Unerwarteter Fehler: Allgemeiner Fehler (0x80041001). (ID des virtuellen Computers:
51BAF990-F1CC-4F25-AB94-A3B7E4B5896C)
In Zeile:1 Zeichen:10

  • get-vm | set-vm -automaticstopaction save
  •      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    • CategoryInfo : InvalidOperation: (:slight_smile: [Set-VM], VirtualizationException
    • FullyQualifiedErrorId : InvalidState,Microsoft.HyperV.PowerShell.Commands.SetVM

zeilush,

Set-VM needs MobyLinuxVM to be off, so quit your Docker first and try again.

Note: This is not required as of Docker for Windows version 1.13

Can you guys test something like this?

@powershell $datetime = Get-Date; $dt = $datetime.ToUniversalTime().ToString('yyyy-MM-dd HH:mm:ss'); docker run --net=host --ipc=host --uts=host --pid=host --security-opt=seccomp=unconfined --privileged --rm alpine date -s $dt

but looks like you can solve this going to Hyper-V manager and setting time sync:
MobyLinuxVM > Settings > Integration Services > Time synchronization

1 Like

This problem is still relevant to Docker Desktop v2.2.0.0 (42247)

When computer goes off from sleep, then datetime in all running containers is incorrect forever (until docker desktop will be restarted).

Settings > Integration Services > Time synchronization setting of Hyper-V doesn’t help (it’s enabled by default).

This is my workaround:

In Windows Task Scheduler create a new task with this trigger:

<QueryList><Query Id="0" Path="System"><Select Path="System">*[System[Provider[@Name='Microsoft-Windows-Power-Troubleshooter'] and EventID=1]]</Select></Query></QueryList>

This is “Exit from sleep mode” trigger.

And in task command select Posershell.exe as a command and -ExecutionPolicy Bypass path\to\fix-docker-time-after-sleep.ps1 as an argument.

Where fix-docker-time-after-sleep.ps1 is a file with content from the answer above:

$datetime = Get-Date
$dt = $datetime.ToUniversalTime().ToString('yyyy-MM-dd HH:mm:ss')
docker run --net=host --ipc=host --uts=host --pid=host --security-opt=seccomp=unconfined --privileged --rm alpine date -s $dt
4 Likes

I hadn’t seen the problem before v2.2.0.0. I assume it’s a regression

Thanks for the script, I’ve been fixing it with the GUI. But as the new file sharing is also broken, I think I’m just going to downgrade.

Bruce

2 Likes

I have the same version as xakep and the same workaround worked for me. Didn’t realize it was due to a sleep issue.

Thanks @xakep!

just adding that i am on Windows 10 with Docker for Windows.

I can confirm that each day I go home from work and come back, the clock in the linux containers has frozen at the point the computer went to sleep, and only continues once awoken.

The “quick fix” is to restart via the Docker Desktop agent, and the clocks are re-sycned.

However, I really ought not to need to do this everytime

how I noticed was because AWS S3 API requires a synced clock for some reason to download files off of it. And if it’s off by a minute, im hooped. And for some reason trying to force my linxu containers to re-sync their time with ntpd doesn’t seem to do anything but stick to the out-of-date clock its been at

Hacky workaround/fix that kicks host:docker time sync to work again by enable/disableing https://github.com/docker/for-win/issues/4526#issuecomment-539647660 and then run that on every resume/wake. https://sumtips.com/how-to/run-program-windows-wakes-up-sleep-hibernate/

Resyncs the host:docker clocks every time you open the lid of the laptop.

Same for me, was working right before 2.2.0.0
Now If docker is started and windows 10 goes in hibernate mode, after wakup, all container that are started are using date/time of the hibernate.

After a restart of docker the date time is again sync.

e.g. docker was started yesterday (11 Feb 2020) then windows 10 was in hibernate for the night and display date/time for yesterday:

docker run --rm alpine date
Tue Feb 11 05:31:32 UTC 2020

Then I restarted docker and date time is now correct:

docker run --rm alpine date
Wed Feb 12 10:47:51 UTC 2020

3 Likes

I have the same issue. Do you think we could expect a fix 4 years after report ?

Running docker desktop community v2.2.0.3 stable on win10

Using Docker for Windows, here. This used to be an issue a long time ago from me, but at some point stopped happening with an update along the way.

Last update to 2.2.04 (43472), the install failed. Second time worked but reset the Hyper-V DockerDesktopVM to a fresh vhd. After which the time was hosed. I validated the host VM was reporting a bad time as well as the containers.

Doing the following resolved it for me. Still waits to be seen of sleeping, restarts, etc effect it though.

In Hyper-v Manager, in the DockerDesktopVM settings -> Management -> Integration Services -> Unchecked Time Syncronization, hit Apply, then re-check and hit apply.

2 Likes

This issue started appearing for me when I updated from 2.1.x to 2.2.x. It causes anything that uses time-based signatures to fail (e.g. many AWS services). Only fix I found is to reboot the VM.

hmm this seems to be an issue for me as well.
i only noticed it from a weekend of my laptop going in and out of sleep /hibernation (and noticed it because of some AWS token issues as well).

restarting the container didn’t work, but restarting all of docker fixed it.

i tried going into hyper V and unchecking and re-checking the time sync to see if that helps.