You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器未同步Windows主机修改后的时间,如何解决?

容器时间同步问题:修改Windows主机时间后容器仍使用UTC当前时间

我需要测试容器中的应用,部分测试需要修改日期/时间到特定值来验证应用运行状态。原本以为修改Windows 10主机时间后启动容器,容器会同步主机修改后的时间,但实际容器仍获取当前UTC时间。

操作步骤

修改Windows主机时间:

> date 07-08-2018
> 07/08/2018 15:25:09.29
> time 12:12:12
> 07/08/2018 12:12:12.00

运行标准Alpine容器查看时间:

> docker run alpine date
Thu Jun 19 13:42:07 UTC 2025

预期容器时间应为07/08/2018 12:12:12左右,但实际显示当前UTC时间。尝试以下两种方法均未解决问题:

docker run  -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro alpine date
docker run --privileged alpine date

请问是否可以关闭时间同步机制,或修复问题让容器同步主机修改后的时间?


解决办法

问题根源在于:Windows上的Linux Docker容器并非直接跑在Windows系统上,而是运行在WSL2虚拟机或Hyper-V虚拟机中,容器读取的是虚拟机的时间,而非Windows主机的时间。修改Windows主机时间不会自动同步到虚拟机,所以容器时间没变化。下面分两种场景给出解决方案:

场景1:使用WSL2作为Docker后端

  1. 临时修改WSL时间(单次生效)

    • 打开PowerShell,进入Docker对应的WSL实例:
      wsl -d docker-desktop
      
    • 在WSL环境中手动设置时间(替换成你需要的时间):
      sudo date -s "2018-07-08 12:12:12"
      
    • 退出WSL后,再启动容器,就能看到容器时间同步为设置的值。
  2. 关闭WSL自动时间同步(持久生效)

    • 进入WSL环境,编辑/etc/wsl.conf文件:
      sudo nano /etc/wsl.conf
      
    • 添加以下配置内容:
      [clock]
      synchronized=false
      
    • 保存退出后,在PowerShell中重启WSL:
      wsl --shutdown
      
    • 重启后WSL不会再自动同步时间,后续修改WSL时间后,容器会一直沿用该时间。

场景2:使用Hyper-V作为Docker后端

  1. 找到Docker对应的Hyper-V虚拟机
    默认虚拟机名称为DockerDesktopVM,可以通过PowerShell查看:

    Get-VM
    
  2. 修改虚拟机时间

    • 先关闭虚拟机:
      Stop-VM DockerDesktopVM
      
    • 设置虚拟机的启动时间为你需要的时间:
      Set-VMClock DockerDesktopVM -StartTime "2018-07-08T12:12:12"
      
    • 启动虚拟机:
      Start-VM DockerDesktopVM
      
    • 之后启动容器,容器时间就会同步为设置的时间。

补充说明

  • 你之前尝试挂载/etc/localtime和/etc/timezone,只是设置容器的时区,不会修改时间本身;
  • --privileged参数只是给容器更高权限,但容器时间依然依赖宿主机(虚拟机)的时间,所以也无法解决问题。

内容的提问来源于stack exchange,提问作者push 22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:42:37