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

问题描述 投票:30回答:8

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

试图解决方案

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

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

现在唯一对我有用的就是摧毁docker机器并重新创建它。这会破坏我的所有图像和容器,再次设置它会非常耗费时间。

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无法正常工作。
macos docker timeout virtualbox docker-machine
8个回答
22
投票

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

docker-machine ls -t 20

好像default timeout of 10 seconds太短了。


4
投票

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

你可以用它来解决它

$ docker-machine stop默认

$ docker-machine启动默认值

$ docker-machine regenerate-certs默认值

不要使用“docker-machine restart default”,因为它不会刷新您的网络配置。


3
投票

我有与Docker版本1.11.2相同的问题,构建b9f10c9

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

$ docker-machine restart

$ eval $(docker-machine env)


1
投票

到目前为止,我有一个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)

说明

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

1
投票

我的问题非常简单。我用我的ufw防火墙阻止了端口2376。 Docker-machine需要打开此端口才能连接到远程端口。

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


0
投票

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

  1. 打开Oracle虚拟机并暂停VM
  2. 在docker机器上重新启动VM $ docker-machine restart default

泊坞版:1.12.3

docker-machine版本:0.8.2,构建e18a919


0
投票

我已打开virtualbox并关闭并手动启动所有vm。状态再次是running


0
投票

我的问题非常简单 - 我在重新启动docker机器后立即执行了“docker machine ls”命令,所以它还没有运行,导致超时。

© www.soinside.com 2019 - 2024. All rights reserved.