已安装 OS X 上的 Docker VM 但命令似乎失败

dwl*_*wlz 7 docker

我正在本地 Mac OS X 机器上设置 Docker,但在使其正常工作时遇到了一些问题。我已按照https://docs.docker.com/installation/mac/ 上的安装说明进行操作。安装 boot2docker 工具之前的一切看起来都很顺利,但是在 VM 运行之后,Docker 命令似乎什么都不做。例如,

$ docker run ubuntu echo hello world
2014/06/17 08:20:54 Post http://localhost:4243/v1.12/containers/create: EOF
Run Code Online (Sandbox Code Playgroud)

每个命令都以 EOF 结尾,并且似乎没有做它实际应该做的事情。这是另一个:

$ docker ps
2014/06/17 08:25:10 Get http://localhost:4243/v1.12/containers/json: EOF
Run Code Online (Sandbox Code Playgroud)

boot2docker 工具创建的 VM 也在运行:

$ boot2docker status
[2014-06-17 08:26:24] boot2docker-vm is running.
Run Code Online (Sandbox Code Playgroud)

我感觉有些东西没有正确设置,但我一行一行地按照说明操作,但看不出哪里出了问题。

非常感谢任何帮助,谢谢!

更新 1

boot2docker 版本:1.0.0 或 0.9.1(不确定——没有版本标志 AFAICT)

$ boot2docker ip
Usage /usr/local/bin/boot2docker {init|start|up|save|pause|stop|restart|status|info|delete|ssh|download}
Run Code Online (Sandbox Code Playgroud)

在 boot2docker 实例上:

$ sudo netstat -ntpl | grep docker
tcp        0      0 :::2375                 :::*                    LISTEN      743/docker

$ docker --version
Docker version 1.0.0, build 63fe64c
Run Code Online (Sandbox Code Playgroud)

更新 2

我刚刚重新安装了 boot2docker,现在我肯定在运行 1.0.0。

$ boot2docker version
Client version: v1.0.0
Git commit: 2fef7b2
Run Code Online (Sandbox Code Playgroud)

我还重新运行了文档中的命令(这与命令告诉我在命令行上设置 DOCKER_HOST 的内容冲突,见下文):

$ boot2docker up
2014/06/17 18:25:43 Waiting for VM to be started...
.............................
2014/06/17 18:26:41 Started.
2014/06/17 18:26:41 Auto detection of the VM's IP address.
2014/06/17 18:26:41 To connect the Docker client to the Docker daemon, please set:
2014/06/17 18:26:41     export DOCKER_HOST=tcp://:4243
Run Code Online (Sandbox Code Playgroud)

但我仍然看到原来的问题。

$ docker run ubuntu echo hello world
2014/06/17 18:28:29 Post http://127.0.0.1:4243/v1.12/containers/create: EOF
Run Code Online (Sandbox Code Playgroud)

然后我重新运行文档中提到的命令:

$ export DOCKER_HOST=tcp://$(boot2docker ip 2>/dev/null):2375
Run Code Online (Sandbox Code Playgroud)

现在看到这个:

$ docker run ubuntu echo hello world
2014/06/17 18:31:39 Cannot connect to the Docker daemon. Is 'docker -d' running on this host?
Run Code Online (Sandbox Code Playgroud)

我应该提到,尝试docker -d在 OS X上运行会发出以下消息:

$ docker -d
2014/06/17 18:34:04 The Docker daemon is only supported on linux
Run Code Online (Sandbox Code Playgroud)

这没有多大帮助...

And*_*inn 12

需要检查的几件事:

更新版本的 boot2docker

检查您的 boot2docker 是否是最新的。如果您是通过 Homebrew 等应用程序安装的,则您可能运行的是旧版本。在https://github.com/boot2docker/osx-installer/releases查看官方版本。一定要运行boot2docker delete,然后boot2docker init在升级后。

更新的 Docker 客户端

运行与 boot2docker 中运行的服务器版本相匹配的 Docker 客户端可能是个好主意。如果您在 boot2docker 中运行 Docker 1.0,请确保您拥有来自https://github.com/boot2docker/osx-installer/releases的 1.0 客户端。

导出正确的端口

命令中的端口可能不正确。你记得export DOCKER_HOST=tcp://$(boot2docker ip 2>/dev/null):2375像文档说的那样运行吗?端口2375是 Docker 1.0(在 boot2docker 0.9.1 和 1.0.0 中)的新默认值。

转发正确的端口

DOCKER_HOST为客户端更新之后,您可能会遇到 boot2docker 0.9.1 的问题,它使用了错误的端口进行 Docker TCP 连接。检查步骤:

  1. 使用boot2docker ssh(密码为tcuser)登录到 boot2docker VM 。
  2. 然后使用sudo netstat -ntpl | grep docker(可能2375)检查侦听端口。
  3. 现在打开 VirtualBox,进入 boot2docker VM 的设置,然后点击Port Forwarding按钮。
  4. 它应该与 boot2docker 中侦听的端口相匹配(可能2375)。
  5. 如果端口不匹配,请尝试更新端口转发,然后再次尝试客户端。


dwl*_*wlz 5

安迪让我完成了 99% 的工作。我将他的答案标记为已接受的答案,但我会在这里写下解决我问题的方法。安装正确版本 (1.0.0) 的 boot2docker 后,我仍然从任何 Docker 命令中得到不正确的输出。

然后我打开 VirtualBox 并读取端口,瞧,端口不正确。但是,将它们切换为正确的值并不能解决问题。

我决定重置虚拟机,因为旧的 bo​​ot2docker 可能设置不正确。以下命令最终解决了该问题。

$ boot2docker delete
$ boot2docker init
$ export DOCKER_HOST=tcp://:2375
Run Code Online (Sandbox Code Playgroud)