为什么在 IBM Container Service 中 docker pull 和 docker build 存在差异?

Why are there differences in docker pull and docker build in IBM Container Service?

我们在 Bluemix 上使用 IBM Container Service 并发现了一个我们无法解释的奇怪现象——似乎 docker pull 和 docker build 在身份验证。

一、必填版本信息:

$ docker -v
Docker version 1.7.0, build 0baf609
$ ice version
ICE CLI Version        : 3.0 598 2015-07-02T19:39:30
$ cf -v
cf version 6.12.1-56792aa-2015-07-06T22:48:00+00:00

这是一个全新的 Ubuntu 虚拟机,上面只安装了 docker、ice(及其先决条件)和 cf 工具。我构建了一个简单的小节点示例来说明问题。只需创建这个 app.js 和 Dockerfile 并将它们放在某个目录中(我使用 Dev/node-hello)然后 cd 到该目录。

app.js

var http = require('http');
var appport = 9085;
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(appport);
console.log("Server running at port");
console.log(appport);

Docker 文件

# sample dockerfile for demonstration
FROM registry.ng.bluemix.net/ibmnode:latest
RUN apt-get -y update
ADD app.js /app.js
EXPOSE 9085
CMD  ["node", "app.js"]

现在,在执行 ice 登录后,您也可以登录 cf 工具,尝试以下操作:

sudo docker build -t <your_namespace>/node-hello

docker 构建将终止,最后一行为:

需要身份验证。

这不是很有帮助,所以如果您在调试模式下使用以下命令重新启动 docker 守护程序:

sudo /usr/bin/docker -d -D &

然后重新运行构建,你会发现docker在输出认证错误之前遇到了一些错误:

DEBU[2494] Error unmarshalling the _ping RegistryInfo: invalid character 'U' after top-level value

这可能是相关的,或者可能是一条红鲱鱼。

现在,奇怪的是,如果您随后执行以下操作:

sudo docker pull registry.ng.bluemix.net/ibmnode

它将在本地毫无问题地拉取镜像,然后如果您再次发出 docker 构建命令,它将 运行 正常!我们只是以某种方式错误地使用了 docker 构建(我不这么认为......这以前总是有效......)还是拉取和构建的管理方式之间存在奇怪的差异?

这似乎是由于 1.7.1 中的 known bug in Docker. It looks like they have issued a fix

你能升级你的客户端再试一次吗?