我们在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);
Dockerfile
# 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"]
现在,在进行冰登录之后,您还可以登录cf工具,尝试以下操作:
sudo docker build -t <your_namespace>/node-hello
docker build将会死掉,最后一行是:
需要验证。
这不是很有用,所以如果你使用以下方式在调试模式下重启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 build命令,它将运行良好!我们是不是只是以某种方式错误地使用了docker build(我不这么认为......这总是在......之前有效)或者管理pull和build的方式有什么奇怪的区别?