我目前正在使用Codefresh 的免费私人注册表来存储我的图像。我正在为我的 Docker 构建使用 CircleCI,所以我从那里使用docker login,以便我可以推送和拉取 Codefresh 注册表。这工作正常。但是,Codefresh 仅在其网络应用程序中列出了它为其构建的图像,因此我无法轻松查看它们的目录。我怀疑这是设计使然,因此用户坚持使用 Codefresh for CI。但是,如果可能的话,我想列出我在注册表中的图像。
我假设这个注册表是标准 Docker Registry 的基本 v2 版本。所以,我四处寻找,发现了这个控制台实用程序来管理图像。但是,它似乎对我不起作用。我不知道这是否是因为注册表管理工具总体上仍然不成熟(网络搜索表明它们是在很久以后才添加的,而且对于很多人来说,这个简单的任务已成为一项艰巨的任务)或者是否有一些不寻常的东西代码新鲜。
这是我正在尝试的:
reg -d -r r.cfcr.io -u myusername -p cfaccesstoken
(-d用于调试)。
这导致:
2017/10/18 11:24:43 registry.ping url=https://r.cfcr.io/v2/
2017/10/18 11:24:44 registry.catalog url=https://r.cfcr.io/v2/_catalog
2017/10/18 11:25:53 registry.catalog url=https://r.cfcr.iohttps://r.cfcr.io/v2/_catalog?n=1000&last=davigsantos/davigsantos/codeflix
FATA[0075] Get https://r.cfcr.iohttps//r.cfcr.io/v2/_catalog?n=1000&last=davigsantos/davigsantos/codeflix: dial tcp: lookup r.cfcr.iohttps on 127.0.1.1:53: no such host
倒数第二行包含一个我不认识的容器名称——我希望它是公开的,而不是我不应该看到的!
最后一行表示某种致命错误,各种 URL 片段以绝对行不通的方式混合在一起。
我还发现删除访问令牌没有任何区别;输出完全相同:
reg -d -r r.cfcr.io -u myusername
我还能尝试什么?我正在运行 Mint Linux,如有必要,可以切换到另一个实用程序。我发出此命令的方式是否有问题,或者 Codefresh 是否运行与标准 API 调用不兼容的非标准注册表?
更新
看起来 Codefresh也有自己的 API,尽管据我所知似乎没有记录。运行该get操作会产生此错误:
由于未提供令牌,因此无法对请求进行身份验证
这令人鼓舞,所以我将尝试找出如何在 curl 调用中提供令牌;Swagger Web 界面似乎不允许这样做。但是我意识到,如果我能让 API 正常工作,它可能无论如何都不会列出我的 Docker 镜像,因为它们不是由 Codefresh 构建的。
更新 2
我在 Codefresh 博客上发现了一些文章,这些文章暗示了如何在 API 上进行身份验证,格式是标题,因此:
--header "x-access-token: (token)"
但是我收到此错误:
{"status":401,"code":"2401","name":"UNAUTHORIZED_ERROR","message":"无法验证请求,因为令牌无效","context":{}}
我使用的令牌与我使用的令牌相同docker login,它有效。我注意到我没有指定我的用户名,所以我还添加了这个 curl 选项:
-u (user):(token)
正如你所看到的,我现在接近尝试随机的东西,因为似乎没有在线官方帮助。
更新 3
在下面的评论提示下,Docker 似乎在login使用后维护了一个访问令牌,在~/.docker/config.json.
因此我尝试了这个:
reg -d -r r.cfcr.io -u myusername -p dockeraccesstoken
(注意如何cfaccesstoken更改为dockeraccesstoken)。
现在返回的速度要快得多(而不是看起来挂起),但什么也不返回:
2017/10/24 10:56:16 registry.ping url=https://r.cfcr.io/v2/
2017/10/24 10:56:18 registry.catalog url=https://r.cfcr.io/v2/_catalog
Repositories for r.cfcr.io

