为什么 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 端口转发很糟糕且非常不可靠。
我有 运行 以下命令将 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 端口转发很糟糕且非常不可靠。