【问题标题】:docker on OSX not returning container output through ssh,OSX 上的 docker 不通过 ssh 返回容器输出,
【发布时间】:2014-03-14 05:29:10
【问题描述】:

我正在使用 boot2docker (v0.6) 在 OSX 10.9 上运行 docker (v0.9.0)。一切正常。我可以在 TinyCore VM 中正常使用 docker。但是,在 OSX 中,我可以向 docker 守护进程发出命令,但我没有收到任何输出。我也无法检索有关容器或进程的信息。例如,我可以从 OSX 运行:

docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

我确实得到了一个容器 ID,但运行 docker psdocker images 会返回一个空列表。如果我 ssh 进入 TinyCore VM 实例并运行 docker ps,我可以看到容器确实已启动并正在运行,并且 docker logs 返回“hello world”日志输出。

我需要做什么才能将输出接收回 OSX 主机?

【问题讨论】:

  • 你能在 OSX 和虚拟机内部添加docker version 的输出吗?也许这会给我们一个关于那里正在发生的事情的提示。
  • 就是这样。 OSX 上的 Docker 客户端是 0.9,但服务器版本是 0.8.1。在 VM 上,客户端和服务器都是 0.8.1 将客户端降级到 0.8.1 工作。我按照这里的说明进行操作:docs.docker.io/en/latest/installation/mac,因此应该更改这些以注意版本不兼容。
  • 好的,我会提供详细的答案,以防万一其他人发生这种情况!

标签: ssh docker


【解决方案1】:

问题在于您的 Docker 客户端(在 OS X 上)比您的服务器(在 boot2docker 虚拟机中)更新。

Docker API 使用语义版本控制,因此每次调用都是对如下所示 URL 的 HTTP 请求:

/v1.10/containers/create…

服务器处理所有版本的 API,因此如果您使用旧客户端(旧 CLI 版本,或为旧版本 Docker 设计的程序),它仍然可以正常工作,因为最新的 Docker 知道如何处理例如/v1.3/blahblahblah.

但是,如果您将较新的客户端与较旧的服务器一起使用,它可能会发出对 /v1.12/… 的请求,而服务器只知道如何处理最多 /v1.10/…。在这种情况下,服务器会给你一个奇怪的答案,比如“未找到”。

这显然会令人困惑:-)

我们期待以下改进:

  • 服务器可以识别/vXXX 模式,如果XXX 是不受支持的版本,它会发出解释性消息;
  • 客户端可以识别这一点,并尝试回退到协议的先前版本。

我们总是欢迎对 Docker 项目的贡献;虽然第二个选项实施起来可能有点棘手,但第一个应该相对容易;所以这可能是将您的名字添加到 Docker 贡献者列表的好方法:D

【讨论】:

    猜你喜欢
    • 2019-02-09
    • 2014-10-15
    • 2018-04-29
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 2015-12-27
    相关资源
    最近更新 更多