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日(重现步骤)

我可以通过以下步骤可靠地重现此问题:

  1. 从新创build的Docker机器开始。
  2. 使用docker-compose upbuild立一些容器。
  3. closures运行容器的计算机。
  4. 重启后,由于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地址。

这对我有用,我的容器没有被销毁:

  1. 打开Oracle虚拟框并暂停虚拟机
  2. 在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。