我正在本地 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
每个命令都以 EOF 结尾,似乎并没有执行它实际上应该执行的操作。这是另一个:
$ docker ps
2014/06/17 08:25:10 Get http://localhost:4243/v1.12/containers/json: EOF
boot2docker 工具创建的虚拟机也正在运行:
$ boot2docker status
[2014-06-17 08:26:24] boot2docker-vm is running.
我感觉有些地方设置不正确,但我逐行按照说明进行操作,却找不到哪里出了问题。
非常感谢您的帮助,谢谢!
更新 1
boot2docker 版本:1.0.0 或 0.9.1(不确定 - 据我所知没有版本标志)
$ boot2docker ip
Usage /usr/local/bin/boot2docker {init|start|up|save|pause|stop|restart|status|info|delete|ssh|download}
在 boot2docker 实例上:
$ sudo netstat -ntpl | grep docker
tcp 0 0 :::2375 :::* LISTEN 743/docker
$ docker --version
Docker version 1.0.0, build 63fe64c
更新 2
我刚刚重新安装了 boot2docker,现在确实运行 1.0.0。
$ boot2docker version
Client version: v1.0.0
Git commit: 2fef7b2
我还重新运行了文档中的命令(这与命令告诉我在命令行上设置 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
但我仍然看到原始问题。
$ docker run ubuntu echo hello world
2014/06/17 18:28:29 Post http://127.0.0.1:4243/v1.12/containers/create: EOF
然后我重新运行文档中提到的命令:
$ export DOCKER_HOST=tcp://$(boot2docker ip 2>/dev/null):2375
现在看看这个:
$ 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?
我应该提一下,尝试在 OS X 上运行docker -d
会弹出以下消息:
$ docker -d
2014/06/17 18:34:04 The Docker daemon is only supported on linux
这没什么帮助...
答案1
需要检查以下几件事:
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。
导出正确的端口
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 连接。检查步骤:
boot2docker ssh
使用(密码为)登录到 boot2docker VMtcuser
。sudo netstat -ntpl | grep docker
然后使用(可能)检查监听端口2375
。- 现在打开 VirtualBox,转到 boot2docker VM 的设置,然后单击按钮
Port Forwarding
。 - 它应该与 boot2docker 中监听的端口匹配(可能
2375
)。 - 如果端口不匹配,请尝试更新端口转发,然后重试客户端。
答案2
Andy 帮助我解决了 99% 的问题。我将他的答案标记为可接受的答案,但我会在这里写下解决我的问题的方法。安装正确版本 (1.0.0) 的 boot2docker 后,我仍然从任何 Docker 命令中得到不正确的输出。
然后我打开 VirtualBox 并读取端口,结果端口不正确。但是,将它们切换为正确值并不能解决问题。
我决定重置虚拟机,因为旧的 boot2docker 可能设置不正确。以下命令最终解决了该问题。
$ boot2docker delete
$ boot2docker init
$ export DOCKER_HOST=tcp://:2375