为什么 boot2docker 和转发到我的 docker 实例的端口会定期挂起?

Why does boot2docker, and port forwarding to my docker instances, periodically hang?

我有 运行 以下命令将 sinatra 和 redis 端口转发到我的 docker 实例 运行 在 OSX 上的 virtualbox 中:

ports=( 4567 6379 )
for port in "${ports[@]}"
do
echo "Forwarding $port"
VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcpport$port,tcp,,$port,,$port"
done

但是,通过我机器的 public IP 定期(例如每 60 秒)向这些 docker 实例中的任何一个发出请求(源自我的机器)将挂起 40-60 秒。但是,我的 docker 实例是健康的,我可以通过 192.168.59.103 直接连接。

因此,为什么会有这样的连接:

redis-cli -h 192.168.1.1 PING

定期挂起,但是

redis-cli -h 192.168.59.103 PING

总是工作? VirtualBox 或 boot2docker 中是否存在某种错误?

此外,在这些请求挂起期间,我注意到对

的调用
boot2docker ip

boot2docker ssh

自己都挂了。我在 运行ning boot2docker 1.6.2 和 VirtualBox 4.3.28 OSX 10.10.3.

额外的调试显示实例间连接现在也受损了。我链接了两个容器,它们之间的 HTTP 请求会定期挂起。我竟然输入了运行telnet container_name 4567,然后我输入了

GET /

当然,这是测试网络服务器的最基本方法。从container_name里面,我运行curl http://localhost:4567/。 telnet 请求挂起,但 curl http://localhost:4567/ 立即返回。

这是我们添加额外的仅本地主机接口的主要原因之一 (192.168.59.103) - 虚拟盒子 bat 端口转发很糟糕且非常不可靠。