12

我刚刚在 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 中确认 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。但这应该是不必要的吗?

我也将此作为问题发布在 docker github 存储库上,但已关闭。一个相关的问题似乎是这个,但没有针对 Windows 发布解决方法或解决方案。

4

6 回答 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 进行操作。

于 2015-10-08T08:21:26.053 回答
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。将 <idx> 替换为上一步中找到的每个索引。
  5. 重新启动 Windows

之后,我能够docker-machine start default,然后docker-machine env default --shell cmd,让 PC 进入睡眠状态,唤醒并docker-machine env default --shell cmd再次运行。

于 2015-10-07T16:02:45.297 回答
5

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

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

于 2015-09-20T08:08:26.397 回答
2

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

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

docker-machine ssh dev

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

sudo shutdown -r now

当机器重新启动时,它似乎刷新了网络并正常工作。但是请注意,简单地运行对我来说docker-machine restart dev没有相同的效果。

在执行 ssh 之前,您的机器需要运行,所以如果它没有运行,请docker-machine start dev在尝试 SSH 之前执行。

于 2015-11-04T22:19:04.313 回答
0

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

将您的网络适配器配置为

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

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

3) 允许 IPV6

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

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

于 2017-04-30T22:00:31.283 回答
0

在 Windows 8.1 和 docker toolbox 1.12.0 上遇到了同样的问题上述解决方案都没有对我有用。

[编辑]

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

  • 在 docker Quickstart Terminal 窗口中,停止 docker 进程Ctrl-C(如果它仍在运行)
  • 运行命令docker-compose down
  • 关闭泊坞窗docker-machine stop default
  • 退出终端窗口Ctrl-D
  • 再次运行 Quickstart Terminal 并执行您需要的所有后续步骤。
于 2016-08-10T09:08:34.783 回答