电脑睡眠后Docker无法访问

Kla*_*urn 12 windows docker windows-10 docker-toolbox

我刚刚在Windows 10上使用docker-toolbox 1.8.2安装了docker .

由于这个问题,我不得不使用这些命令重新创建docker镜像

docker-machine rm default
docker-machine --native-ssh create -d virtualbox default
Run Code Online (Sandbox Code Playgroud)

之后它一直很好,除了一个问题:

当PC进入休眠状态然后再次唤醒时,docker命令无法再连接.例:

> docker images
An error occurred trying to connect: Get https://192.168.99.100:2376/v1.20/images/json: 
dial tcp 192.168.99.100:2376: ConnectEx tcp: A connection attempt failed because the 
connected party did not properly respond after a period of time, or established connection 
failed because connected host has failed to respond.
Run Code Online (Sandbox Code Playgroud)

但是,docker-machine将机器列为正在运行:

> docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM
default   *        virtualbox   Running   tcp://192.168.99.100:2376
Run Code Online (Sandbox Code Playgroud)

我还可以在VirtualBox中确认VM屏幕似乎是活动的.

我试过启动和停止机器,但这没有用

C:\x> docker-machine stop default
C:\x> docker-machine start default
Starting VM...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
C:\x> docker-machine env default --shell=powershell
Run Code Online (Sandbox Code Playgroud)

具有讽刺意味的是,最后一个命令挂起,因此我从未获得任何环境设置.

唯一有帮助的是重启整个PC.但这应该是不必要的?

我还在docker github存储库上发布了这个问题,但是已经关闭了.一个相关的问题似乎是这个,但没有为Windows发布解决方法或解决方案.

Dzo*_*ukr 13

在与VirtualBox + Docker Toolbox战斗之后,我终于找到了方法,如何使Docker再次工作(即使没有重新启动所有容器):

  1. 从睡眠中唤醒PC
  2. 尝试docker images(不会工作)
  3. 打开VirtualBox - >关闭具有保存状态的VM(CTRL + V)
  4. 再次运行您的VM
  5. 再试docker images一次(现在应该工作)

请注意:所有步骤仅在VirtualBox中!Running docker-machine restart default将创建另一个仅限主机的适配器,这是您不想要的.如果您仍然这样做,删除所有额外创建的适配器(文件 - >首选项 - > VirtualBox上的网络),然后按照步骤1-5.

  • 只是一个疯狂的猜测 - 类似于 90 年代的老式冒险游戏,使用“一切皆有可能”。这神奇地起作用了。 (2认同)

Jon*_*han 6

我在Windows 8.1上遇到了完全相同的症状......问题在于它并不是特定于Docker的问题,而是更多Windows如何在睡眠后管理VirtualBox网络适配器(我认为......).在我的情况下,罪魁祸首是网络适配器的地址在睡眠后变为私有(它们变成169.*地址).

这个给我这个想法的人的信用:http://lyngtinh.blogspot.ca/2011/12/how-to-disable-autoconfiguration-ipv4.html

固定:

  1. 以管理员身份启动命令提示符
  2. 找出"有用的"网络适配器:ipconfig /all.在我的案例中有用的是标有"VirtualBox Host-Only Ethernet Adapter"的那些没有私有ips(不是以169.*开头).
  3. 运行此命令并记录有用的VirtualBox网络适配器"IDX": netsh interface ipv4 show inter.
  4. 运行此命令以禁用IP自动配置:netsh interface ipv4 set interface <idx> dadtransmits=0 store=persistent.将<idx>替换为上一步中找到的每个索引.
  5. 重启Windows

后来,我能docker-machine start default,然后docker-machine env default --shell cmd,把PC睡觉,醒来并运行docker-machine env default --shell cmd一次.


Ami*_*mir 5

我发现删除'host only adapter'(文件 - >首选项 - > VirtualBox上的网络),然后重启docker-machine帮助.

不是真正的解决方案.但可能更好地重新启动计算机.