Docker机器超时 - 如何在不销毁机器的情况下修复?

37

我在使用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无法工作。

所以像docker ps这样的命令不起作用?但是ssh可以工作? - Shimon Tolts
1
我遇到了完全相同的问题。可以通过ssh连接,但无法使其激活。 - jdcaballerov
@jdcaballerov:升级到Docker beta版本对我有用。 - Josh Cole
我试图四处查看,然后运行 docker-machine upgrade,结果一切都消失了。 - EvgeniySharapov
最新版本的Docker没有这些问题。 :) - Josh Cole
显示剩余3条评论
9个回答

24

这个命令对于使用DigitalOcean驱动器的我很有用:

docker-machine ls -t 20

似乎默认的10秒超时时间太短了。


1
很遗憾这个超时时间没有对应的环境变量。每次都需要手动添加或创建别名/ shell 函数,真是一件麻烦事。 - Ashley Aitken

7

这通常是由您启动和停止计算机的方式引起的问题。

您可以使用以下方法解决:

  1. $ docker-machine stop default
  2. $ docker-machine start default
  3. $ docker-machine regenerate-certs default

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


对我来说没有用,但更重要的是...停止/启动和再生需要很长时间。 - Richard

6

请检查您是否在使用代理或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

2
真是救命稻草啊!我开着VPN,已经花了两个小时来解决这个问题了! - Shivansh Jagga

3

我曾经遇到过与Docker版本1.11.2,构建b9f10c9相同的问题。

以下方法对我有效 - 我的Docker机器已恢复到运行状态

  1. $ docker-machine restart
  2. $ eval $(docker-machine env)

1

1
到目前为止,我有一个有点笨拙的解决方案 - 这将修复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 机器。
  • 确保终端已设置为 Docker 机器的新 IP 地址。

0

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

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

$ docker-machine restart default

  • docker版本:1.12.3
  • docker-machine版本:0.8.2,构建e18a919

嗨@tej,如果你升级到最新版本的Docker,这个问题就不再存在了。你完全不需要使用Virtual Box。 - Josh Cole

0

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


请升级到最新版本的Docker,这个问题很久以前就已经解决了。 - Josh Cole
我有Docker版本1.13.1,构建编号为092cba3。每当我将我的Linux Mint置于休眠状态时,就会出现这个问题。 - Crystal

0

我的问题非常琐碎 - 我在重新启动 Docker 机器后立即执行了 docker machine ls 命令,因此它尚未运行,这导致了超时。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接