我刚刚在 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 的解决方法或解决方案。
经过与 VirtualBox + Docker Toolbox 的斗争,我终于找到了方法,如何让 Docker 再次工作(即使不重新启动所有容器):
docker images
(行不通)docker images
(现在应该可以了)请注意:所有步骤仅在 VirtualBox 中进行!运行
docker-machine restart default
将创建另一个仅主机适配器,这是您不想要的。如果您还是这样做了,请删除所有额外创建的适配器(VirtualBox 上的“文件”->“首选项”->“网络”),然后按照步骤 1-5 进行操作。
我在 Windows 8.1 上经历过完全相同的症状...问题是,这并不是真正的 docker 特定问题,而是更多 Windows 如何在睡眠后管理 VirtualBox 网络适配器的问题(我认为...)。在我的例子中,罪魁祸首是网络适配器的地址在睡眠后变得私有(它们变成了 169.* 地址)。
感谢给我这个想法的人:http://lyngtinh.blogspot.ca/2011/12/how-to-disable-autoconfiguration-ipv4.html
修复:
ipconfig /all
。在我的例子中,有用的是那些标记为“VirtualBox Host-Only Ethernet Adapter”的适配器,它没有私有 ip(不以 169.* 开头)。netsh interface ipv4 show inter
。netsh interface ipv4 set interface <idx> dadtransmits=0 store=persistent
。将 之后,我能够
docker-machine start default
,然后docker-machine env default --shell cmd
,让电脑进入睡眠状态,唤醒并再次运行docker-machine env default --shell cmd
。
我发现删除“仅主机适配器”(VirtualBox 上的“文件”->“首选项”->“网络”)并重新启动 docker-machine 会有所帮助。
这不是一个真正的解决方案。但最好重新启动计算机。
在这里尝试了所有其他答案,并取得了不同但不一致的成功,下面的内容似乎在这个问题发生后可靠地为我带回来。
打开一个powershell/命令窗口(如果我在以管理员身份打开的powershell窗口中运行所有docker-machine命令,我会取得最大的成功,我不知道这是否重要)然后运行(其中“dev”是你的 docker 机器实例):
docker-machine ssh dev
然后在打开的终端上运行:
sudo shutdown -r now
机器重启后,似乎刷新了网络,工作正常。但请注意,简单地运行
docker-machine restart dev
不 对我有同样的效果。
您的计算机需要先运行才能执行 ssh,因此如果它没有运行,请在尝试 SSH 之前执行
docker-machine start dev
。
在 Windows 8.1 和 docker toolbox 1.12.0 上也有同样的问题 上述解决方案都不适合我。
[编辑]
找到了另一种让docker在系统唤醒后工作的方法:
Ctrl-C
(如果它仍在运行)docker-compose down
docker-machine stop default
Ctrl-D
这对我有用,在 Windows 主机上。
将您的网络适配器配置为
1) 允许网络适配器唤醒计算机,
2)允许魔法包唤醒计算机,
3) 允许IPV6
http://www.worldstart.com/dropped-internet-connection-in-sleep-mode/
此外,在虚拟盒网络设置中,转到高级,并允许虚拟机使用混杂模式,或允许全部