电脑睡眠后Docker无法访问

时间:2015-09-13 07:42:20

标签: windows docker windows-10 docker-toolbox

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

由于this issue,我不得不使用这些命令重新创建docker镜像

docker-machine rm default
docker-machine --native-ssh create -d virtualbox default

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

当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.

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

> docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM
default   *        virtualbox   Running   tcp://192.168.99.100:2376

我还可以在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

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

唯一有用的是重启整个PC。但这应该是不必要的?

我也将其发布为an issue on the docker github repository,但已关闭。 A related issue seems to be this one,但没有针对Windows发布解决方法或解决方案。

5 个答案:

答案 0 :(得分:13)

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

  1. 从睡眠中唤醒电脑
  2. 尝试docker images(不会工作)
  3. 打开VirtualBox - >关闭具有保存状态的VM(CTRL + V)
  4. 再次运行您的虚拟机
  5. 再次尝试docker images(现在应该可以使用)
  6. 请注意:所有步骤仅在VirtualBox中!运行docker-machine restart default将创建另一个仅限主机的适配器,这是您不想要的。如果您仍然这样做,请删除所有另外创建的适配器(文件 - >偏好设置> VirtualBox上的网络),然后按照步骤1-5进行操作。

答案 1 :(得分: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. 运行此命令并记下" Idx"有用的VirtualBox网络适配器:netsh interface ipv4 show inter
  4. 运行此命令以禁用IP自动配置:netsh interface ipv4 set interface <idx> dadtransmits=0 store=persistent。替换&lt; idx&gt;在上一步中找到每个索引。
  5. 重新启动Windows
  6. 之后,我能够docker-machine start default,然后docker-machine env default --shell cmd让PC进入睡眠状态,唤醒并再次运行docker-machine env default --shell cmd

答案 2 :(得分:2)

在这里尝试了所有其他答案,并且具有不同但不一致的成功之后,以下似乎可以在发生此问题后可靠地将它带回来。

打开一个powershell /命令窗口(如果我在以管理员身份打开的PowerShell窗口中运行所有docker-machine命令,我最成功,我不知道这是否重要)然后运行(其中“dev”是您的泊坞机器实例的名称):

docker-machine ssh dev

然后在打开的终端上运行:

sudo shutdown -r now

当机器重新启动时,它似乎刷新网络并正常工作。但请注意,仅仅运行docker-machine restart dev 对我有同样的效果。

您的计算机需要先运行才能执行ssh,因此如果它没有运行,请在尝试SSH之前执行docker-machine start dev

答案 3 :(得分:0)

在Windows 8.1和docker toolbox 1.12.0上遇到同样的问题 上述解决方案也不适用于我。

[编辑]

找到另一种在系统唤醒后使docker工作的方法:

  • 在泊坞窗快速入门终端窗口中,停止泊坞窗进程Ctrl-C(如果它仍在运行)
  • 运行命令docker-compose down
  • 使用docker-machine stop default
  • 关闭泊坞窗
  • 退出终端窗口Ctrl-D
  • 再次运行Quickstart Terminal并执行您需要的所有后续步骤。

答案 4 :(得分:0)

这适用于我在Windows主机上。

将网络适配器配置为

1)允许网络适配器唤醒计算机,

2)允许魔术包唤醒计算机,

3)允许IPV6

http://www.worldstart.com/dropped-internet-connection-in-sleep-mode/

此外,在虚拟盒网络设置上,转到高级,允许混杂模式到VM计算机,或允许所有