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

Jos*_*ole 34 macos virtualbox timeout docker docker-machine

我在Docker Machine上遇到了一个反复出现的问题 - 它每隔几天就会决定超时,一旦发生这种情况我就无法恢复.

docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL   SWARM   DOCKER   ERRORS
default            virtualbox   Timeout
Run Code Online (Sandbox Code Playgroud)

环境信息

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
Run Code Online (Sandbox Code Playgroud)

试图解决方案

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

  • 重启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)
Run Code Online (Sandbox Code Playgroud)

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


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

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

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

Tom*_*Tom 23

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

docker-machine ls -t 20

好像10秒默认超时时间太短了.


Fab*_*tto 5

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

您可以使用解决

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

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


lhe*_*ann 5

检查您使用的是代理还是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
Run Code Online (Sandbox Code Playgroud)

  • 多么救命啊!我打开了 VPN,并在过去 2 小时内解决了这个问题! (2认同)

Jos*_*ole 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)
Run Code Online (Sandbox Code Playgroud)

解释

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