Docker机器超时 - 如何在不破坏机器的情况下进行修复?

时间:2016-05-06 10:10:26

标签: macos docker timeout virtualbox docker-machine

我的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

尝试解决方案

我没有按特定顺序尝试以下事项:

  • 重新启动泊坞机。
  • 正在运行eval "$(docker-machine env default)"
  • 重新生成证书docker-machine regenerate-certs default
  • 重新启动主机框。
  • 升级Docker。
  • 重新安装Docker。
  • 升级VirtualBox。
  • 删除所有VirtualBox仅限主机的网络设备。

哈克

现在唯一能为我工作的是摧毁泊坞机并重新创建它。这会破坏我的所有图像和容器,再次设置它会非常耗费时间。

docker-machine rm -y default && docker-machine create -d virtualbox default && eval $(docker-machine env)

我有什么可以尝试的吗?谢谢!

更新:5月9日(重播步骤)

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

  1. 从新创建的Docker机器开始。
  2. 使用docker-compose up构建一些容器。
  3. 在容器运行时关闭计算机。
  4. 重启后,由于Docker机器超时,Docker CLI无法正常工作。

9 个答案:

答案 0 :(得分:20)

此命令对我使用了digitalocean驱动程序:

docker-machine ls -t 20

似乎default timeout of 10 seconds太短了。

答案 1 :(得分:4)

这通常是与启动和停止机器的方式有关的问题。

U可以使用

解决它

$ docker-machine stop default

$ docker-machine start default

$ docker-machine regenerate-certs default

请勿使用" docker-machine restart default"因为它不会刷新你的网络配置。

答案 2 :(得分:3)

我在Docker 1.11.2版本中遇到了同样的问题,构建了b9f10c9

这对我有用 - 我的码头机器回到了运行状态

$ docker-machine restart

$ eval $(docker-machine env)

答案 3 :(得分:3)

检查您是否正在使用代理或VPN!

以上所有建议均不适用于我,直到我关闭VPN并突然:

docker-machine.exe ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
default   *        virtualbox   Running   tcp://192.168.99.102:2376           v19.03.5

答案 4 :(得分:1)

我的问题很简单。我用ufw防火墙阻止了端口2376。 Docker机器需要打开此端口才能连接到远程计算机。

I found the answer to my problem in on this page:

答案 5 :(得分:0)

到目前为止,我有一些hacky解决方案 - 这可以修复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)

<强>解释

  • 销毁默认的泊坞机器,容器和图像。
  • 在VirtualBox上创建一个新的docker机器并停止它,以便我们可以修改VirtualBox。
  • 为VirtualBox上的各种应用程序添加端口转发。
  • 启动泊坞机。
  • 确保为docker机器的新IP地址设置终端。

答案 6 :(得分:0)

这对我有用,我的容器没有被破坏:

  1. 打开Oracle虚拟框并暂停VM
  2. 在docker机器上重新启动VM

    $ docker-machine restart default

  3. docker version:1.12.3

    docker-machine version:0.8.2,build e18a919

答案 7 :(得分:0)

我已打开虚拟机并关闭并手动启动所有vm。状态再次为running

答案 8 :(得分:0)

我的问题非常简单 - 我做过#34; docker machine ls&#34;重新启动docker机器后立即命令,因此它还没有运行,导致超时。