docker机器超时 – 如何修复而不破坏机器?
我在Docker Machine上遇到一个反复出现的问题 – 每隔几天它就会决定超时,一旦发生这种情况,我无法恢复。
例
docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default virtualbox Timeout
环境信息
uname -a Darwin ColeyMBPR 15.4.0 Darwin Kernel Version 15.4.0: Fri Feb 26 22:08:05 PST 2016; root:xnu-3248.40.184~3/RELEASE_X86_64 x86_64 docker version 1.11.0 docker-machine version 0.7.0 vboxmanage --version 5.0.20r106931
尝试解决scheme
我已经尝试了以下的东西没有特别的顺序:
- 重新启动docker机。
- 运行
eval "$(docker-machine env default)"
- 重新生成证书
docker-machine regenerate-certs default
- 重新启动我的主机箱。
- 升级Docker。
- 重新安装Docker。
- 升级VirtualBox。
- 删除所有VirtualBox主机专用的networking设备。
劈
现在唯一对我有用的是破坏docker机器并重新创build它。 这破坏了我所有的图像和容器,而且再次设置它非常耗时。
docker-machine rm -y default && docker-machine create -d virtualbox default && eval $(docker-machine env)
有什么我可以尝试吗? 谢谢!
更新:5月9日(重现步骤)
我可以通过以下步骤可靠地重现此问题:
- 从新创build的Docker机器开始。
- 使用
docker-compose up
build立一些容器。 - closures运行容器的计算机。
- 重启后,由于Docker机器超时,Docker CLI无法正常工作。
尝试切换到新的docker(beta)解决scheme
这个命令对我来说是数字海洋驱动的:
docker-machine ls -t 20
似乎10秒的默认超时时间太短了。
我和Docker版本1.11.2有同样的问题,build b9f10c9
这工作对我来说 – 我的docker机器回到运行状态
$ docker-machine restart
$ eval $(docker-machine env)
到目前为止,我有一个hacky的解决scheme – 这修复了docker机,但破坏所有的容器和图像。
脚本:rebuild-machine.sh
docker-machine rm -y default docker-machine create -d virtualbox default docker-machine stop default VBoxManage modifyvm "default" --natpf1 "Forwarding App 1,tcp,127.0.0.1,3000,,3000" VBoxManage modifyvm "default" --natpf1 "Forwarding App 2,tcp,127.0.0.1,3001,,3001" VBoxManage modifyvm "default" --natpf1 "Forwarding App 3,tcp,127.0.0.1,3004,,3004" VBoxManage modifyvm "default" --natpf1 "Forwarding App 4,tcp,127.0.0.1,3005,,3005" VBoxManage modifyvm "default" --natpf1 "Forwarding App 5,tcp,127.0.0.1,3006,,3006" VBoxManage modifyvm "default" --natpf1 "Forwarding App 6,tcp,127.0.0.1,8081,,8081" docker-machine start default eval $(docker-machine env)
说明
- 销毁默认的docker机,容器和图像。
- 在VirtualBox上创build一个新的Docker机器并停止它,以便我们可以修改VirtualBox。
- 为VirtualBox上的各种应用程序添加端口转发。
- 启动docker机。
- 确保terminal设置了docker机器的新IP地址。
这对我有用,我的容器没有被销毁:
- 打开Oracle虚拟框并暂停虚拟机
-
在Docker机器上重新启动VM
$ docker-machine restart默认
docker版本:1.12.3
docker机版本:0.8.2,build e18a919
我已经打开virtualbox并closures并手动启动所有虚拟机/。 状态再次running
这通常是与您启动和停止机器的方式有关的问题。
你可以使用它来解决它
$ docker-machine停止默认
$ docker-machine启动默认
$ docker-machine regenerate-certs默认
不要使用“docker-machine restar default”,因为它不会刷新你的networkingconfiguration。