计算机睡眠后无法访问 Docker

问题描述 投票:0回答:6

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

由于这个问题我不得不使用这些命令重新创建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 中确认虚拟机屏幕似乎处于活动状态。

我尝试过启动和停止机器,但这没有帮助

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

讽刺的是,最后一个命令挂起,所以我从来没有得到任何环境设置。

唯一有帮助的是重新启动整个电脑。但这应该是不必要的吧?

我也将其发布为 docker github 存储库上的问题,但已关闭。 相关问题似乎是这个问题,但尚未发布适用于 Windows 的解决方法或解决方案。

windows docker windows-10 docker-toolbox
6个回答
13
投票

经过与 VirtualBox + Docker Toolbox 的斗争,我终于找到了方法,如何让 Docker 再次工作(即使不重新启动所有容器):

  1. 将电脑从睡眠状态唤醒
  2. 尝试
    docker images
    (行不通)
  3. 打开 VirtualBox -> 关闭虚拟机并保存状态 (CTRL+V)
  4. 再次运行您的虚拟机
  5. 再次尝试
    docker images
    (现在应该可以了)

请注意:所有步骤仅在 VirtualBox 中进行!运行

docker-machine restart default
将创建另一个仅主机适配器,这是您不想要的。如果您还是这样做了,请删除所有额外创建的适配器(VirtualBox 上的“文件”->“首选项”->“网络”),然后按照步骤 1-5 进行操作。


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”的适配器,它没有私有 ip(不以 169.* 开头)。
  3. 运行此命令并记下有用的 VirtualBox 网络适配器的“Idx”:
    netsh interface ipv4 show inter
  4. 运行此命令可禁用 IP 自动配置:
    netsh interface ipv4 set interface <idx> dadtransmits=0 store=persistent
    。将 替换为上一步中找到的每个索引。
  5. 重新启动Windows

之后,我能够

docker-machine start default
,然后
docker-machine env default --shell cmd
,让电脑进入睡眠状态,唤醒并再次运行
docker-machine env default --shell cmd


5
投票

我发现删除“仅主机适配器”(VirtualBox 上的“文件”->“首选项”->“网络”)并重新启动 docker-machine 会有所帮助。

这不是一个真正的解决方案。但最好重新启动计算机。


2
投票

在这里尝试了所有其他答案,并取得了不同但不一致的成功,下面的内容似乎在这个问题发生后可靠地为我带回来。

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

docker-machine ssh dev

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

sudo shutdown -r now

机器重启后,似乎刷新了网络,工作正常。但请注意,简单地运行

docker-machine restart dev
对我有同样的效果。

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

docker-machine start dev


0
投票

在 Windows 8.1 和 docker toolbox 1.12.0 上也有同样的问题 上述解决方案都不适合我。

[编辑]

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

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

0
投票

这对我有用,在 Windows 主机上。

将您的网络适配器配置为

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

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

3) 允许IPV6

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

此外,在虚拟盒网络设置中,转到高级,并允许虚拟机使用混杂模式,或允许全部

© www.soinside.com 2019 - 2024. All rights reserved.