【发布时间】:2015-07-07 17:01:06
【问题描述】:
我们在 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"]
现在,在进行 ice 登录后,您也会登录 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(我不这么认为……这在以前一直有效……)还是在管理拉取和构建的方式之间存在奇怪的区别?
【问题讨论】:
-
你的问题是什么,不清楚你的问题是什么?
-
我尝试在我的 Mac 上本地重现该问题,但无法重现该问题。你认为它是 Linux 特有的吗?
-
截至上周发布时,它还不是 Linux 特定的——我们的另一个人也设法在 Mac 上按照上述步骤的确切顺序重现了它。
-
Ryan,我刚刚确认它仍然在 Linux 上发生。我删除了我的docker中的所有本地图像,按照上面的方式构建了docker,再次遇到了身份验证错误。
-
现在我正在研究不同的文档来源,看来 Dockerfile FROM 的行为可能是模棱两可的。数字海洋“docker 解释”网站指出,FROM 应该具有以下行为:“如果在主机上找不到 FROM 映像,docker 将尝试从 docker 映像索引中找到(并下载)它。”官方 docker另一方面,文档只说明了以下内容:“图像可以是任何有效的图像——从公共存储库中提取图像特别容易开始。”那么行为应该是什么?