由于tcp超时,docker无法连接到boot2docker

时间:2014-11-01 05:07:03

标签: osx-mavericks docker boot2docker

我正在运行Mac OS 10.9.5,我跟着https://docs.docker.com/installation/mac/安装了docker。 即使boot2docker VM在后台运行,我在运行docker时收到超时错误消息。

nikhil@macbook ~> boot2docker status
running
nikhil@macbook ~> boot2docker ip

The VM's Host only interface IP address is: 192.168.59.103

nikhil@macbook ~> docker run hello-world
2014/11/01 01:01:31 Post https://192.168.59.103:2376/v1.15/containers/create: dial tcp 192.168.59.103:2376: i/o timeout
nikhil@macbook ~> docker search ubuntu
2014/11/01 01:02:40 Get https://192.168.59.103:2376/v1.15/images/search?term=ubuntu: dial tcp 192.168.59.103:2376: i/o timeout

我已经验证了docker在boot2docker vm中运行并且我的端口是正确的。

nikhil@macbook ~> boot2docker ssh
                        ##        .
                  ## ## ##       ==
               ## ## ## ##      ===
           /""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
           \______ o          __/
             \    \        __/
              \____\______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.3.1, build master : 9a31a68 - Fri Oct 31 03:14:34 UTC 2014
Docker version 1.3.1, build 4e9bbfa
docker@boot2docker:~$ sudo netstat -ntpl | grep docker
tcp        0      0 :::2376                 :::*                    LISTEN      629/docker

12 个答案:

答案 0 :(得分:64)

我正在使用OSX Yosemite和Cisco Anyconnect(显然使用boot2docker这是一个糟糕的组合),以下内容终于为我工作了(感谢linked GitHub issue comment):

这些步骤将添加端口转发规则并修改您的环境,使docker指向127.0.0.1(而不是192.168.59.103或其他NATed IP。)

首先 - 需要安装boot2docker但不运行。

如果当前正在运行 - 请立即停止:

boot2docker down

添加规则以将来自127.0.0.1:2376的流量转发到boot2docker vm上的端口2376

vboxmanage modifyvm "boot2docker-vm" --natpf1 "docker,tcp,127.0.0.1,2376,,2376"

启动boot2docker:

boot2docker up

设置默认的DOCKER环境变量:

$(boot2docker shellinit)

覆盖DOCKER_HOST变量以指向127.0.0.1

export DOCKER_HOST=tcp://127.0.0.1:2376

现在你应该可以运行docker命令了:

docker version

答案 1 :(得分:57)

我也有这个问题,这是临时解决方案。

首先,打开virtualbox并检查boot2docker vm上的网络设置,以查看host only适配器的名称。就我而言,它是vboxnet1;对你来说,它可能是vboxnet0。

然后,应用此命令:

sudo route -nv add -net 192.168.59 -interface vboxnet1

现在你应该可以运行docker命令了。

有关详细信息,请参阅this issue

编辑:我注意到这个问题的一个共同点是cisco anyconnect(包括我),fwiw

答案 2 :(得分:45)

以下是我为解决问题所采取的措施(我使用OSX Yosemite并且接受的答案对我不起作用):

  • boot2docker delete - 警告: 这会删除所有泊坞窗图片。
  • 在Virtualbox中,转到VirtualBox(menu)=&gt; 首选项=&gt;网络=&gt;仅限主机网络
    • 删除仅限主机的网络,然后重新添加
  • boot2docker init
  • boot2docker up

现在,Docker通过iTerm2从OS X命令行工作。

答案 3 :(得分:6)

这也发生在我身上,以上都没有解决问题。

今天,感谢同事的建议,我没有先启动我的VPN。我重新启动了我的机器,并从头开始使用docker。

boot2docker init
boot2docker up
$(boot2docker shellinit)
docker run hello-world

按预期工作!

我发现Florian Rosenberg的这个post很有用。我详细阅读了它,但我认为他在第一部分中提出的大部分内容已被考虑到最新版本的boot2docker中。但有点深刻的是“连接到VPN将破坏”。它的建议是寻找一个拒绝任何的防火墙规则。因此,如果没有VPN启动,我会查找此规则,但它并不存在。果然,一旦我启动了VPN,我就得到了以下(不同的)错误......

docker run hello-world
2014/11/13 11:11:18 Post https://192.168.59.103:2376/v1.15/containers/create: dial tcp 192.168.59.103:2376: permission denied

我检查了防火墙规则,确定添加了新规则......     sudo ipfw -a list | grep“deny ip”     00411 1 64拒绝ip从任何

我删除了防火墙规则后:     sudo ipfw delete 00411

我能够从OSX命令shell与docker交谈。

答案 4 :(得分:5)

好的,所以这也发生在我身上。

首先,设置环境变量是必要的。但是,之后,即使在那之后我仍然会收到i / o超时错误。

因此,我不是通过运行应用程序包(单击boot2docker图标)来启动boot2docker,而是从命令行启动它。

我第一次执行,

$boot2docker init

这就是说,VM已经在运行了。

然后我继续尝试启动它。

$boot2docker start

这开始了。

您可以通过运行

进行验证
$boot2docker info

它会打印一个关于正在运行的实例的JSON。

然后,你可以进入它并运行

$boot2docker ssh
$docker run hello-world

那就是它。希望它有所帮助。

答案 5 :(得分:4)

运行Cisco AnyConnect后出现此问题。即使我关闭了AnyConnect,问题依然存在。 @ treehau5的答案有效,但对我来说也是boot2docker poweroff,然后使用Activity Monitor,杀死AnyConnect留下的ciscod。然后我打开一个新的终端窗口并正常启动boot2docker,然后docker命令工作正常。

答案 6 :(得分:3)

这对我来说很容易。我升级了virtualbox,这个问题就消失了。

答案 7 :(得分:2)

我尝试了treehau5方法,但它没有用。我改变了VirtualBox的boot2docker vm设置的网络设置 - 'host-only Adapter的混杂模式为'允许全部'

答案 8 :(得分:0)

我从VirtualBox首选项中删除了vboxnet0并初始化了第二个boot2docker vm(boot2docker --vm =&#34; boot2docker-vm2&#34; init)以使用正确的设置重新创建vboxnet0。在这之后,事情似乎恢复正常。

答案 9 :(得分:0)

当我遇到类似障碍时,这对我有用。确保您已升级VirtualBox,然后:

  1. boot2docker stop
  2. boot2docker init
  3. boot2docker start; eval "$(boot2docker shellinit)"
  4. 然后,为了理智,请检查$DOCKER_HOST是否匹配$(boot2docker ip)。我怀疑我有很多事情要发生,就像我刚开始的时候一样,$DOCKER_HOST已经不知何故了。

    问题和一些讨论可以在GitHub问题页面here中找到 - 它看起来好像通常只是VirtualBox的一个例子。

答案 10 :(得分:-1)

您检查过DOCKER_HOST环境变量了吗?它应该指向

export DOCKER_HOST = tcp://192.168.59.103:2376

答案 11 :(得分:-1)

在我的情况下,我只需重新启动我的Mac主机,问题就消失了!我没有连接到VPN或任何类似的东西。我不确定发生这种情况的原因。