hal*_*fer 7 docker docker-registry
我目前正在使用Codefresh的免费私人注册表来存储我的图像.我正在使用CircleCI作为我的Docker构建,所以从那里我使用docker login所以我可以推送到Codefresh注册表.这很好用.但是,Codefresh仅在其Web应用程序中列出了它为其构建的图像,因此我无法轻松查看它们的目录.我怀疑这是设计的,所以用户坚持使用Codefresh进行CI.但是,如果可能的话,我想列出我在注册表中的图像.
我假设此注册表是标准Docker Registry的基本v2版本.所以,我有一个狩猎,并找到这个控制台实用程序来管理图像.但是,它似乎对我不起作用.我不知道这是否是因为注册管理工具一般还不成熟(网络搜索表明它们之后被添加了很多,并且有很多人为这个简单的任务做了大量工作)或者是否有不寻常的事情Codefresh.
这是我正在尝试的:
reg -d -r r.cfcr.io -u myusername -p cfaccesstoken
Run Code Online (Sandbox Code Playgroud)
(-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
Run Code Online (Sandbox Code Playgroud)
倒数第二行包含一个我不认识的容器名称 - 我希望它是公共的,而不是我不应该看到的!
最后一行表示某种致命错误,各种各样的URL片段以绝对不可行的方式混合在一起.
我还发现删除访问令牌没有区别; 输出完全相同:
reg -d -r r.cfcr.io -u myusername
Run Code Online (Sandbox Code Playgroud)
我还能尝试什么?我正在运行Mint Linux,如果有必要,可以更换为另一个实用程序.发出此命令的方式有问题,或者Codefresh是否运行与标准API调用不兼容的非标准注册表?
看起来Codefresh 也有自己的API,尽管据我所知,它似乎没有记录.运行该get操作会产生此错误:
无法验证请求,因为未提供令牌
这是令人鼓舞的,所以我将尝试找出如何在卷曲调用中提供令牌; Swagger Web界面似乎不允许它.但是我意识到,如果我能使API工作,它可能无法列出我的Docker图像,因为它们不是由Codefresh构建的.
我在Codefresh博客上发现了一些文章,提示如何在API上进行身份验证,格式是标题:
--header "x-access-token: (token)"
Run Code Online (Sandbox Code Playgroud)
但是我收到此错误:
{ "状态":401, "代码": "2401", "名称": "UNAUTHORIZED_ERROR", "消息": "无法验证请求,因为标记是无效", "上下文":{}}
我正在使用的令牌与我使用的令牌相同docker login,可以使用.我注意到我没有指定我的用户名,所以我也添加了这个curl选项:
-u (user):(token)
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我现在接近尝试随机的东西,因为似乎没有在线官方帮助.
下面的评论提示,似乎Docker在login使用后维护了一个访问令牌~/.docker/config.json.
因此我尝试了这个:
reg -d -r r.cfcr.io -u myusername -p dockeraccesstoken
Run Code Online (Sandbox Code Playgroud)
(注意如何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
Run Code Online (Sandbox Code Playgroud)
您需要首先在 CodeFresh 用户设置上生成令牌
接下来我将向您展示如何从终端登录
curl -H 'Host: r.cfcr.io' -H 'User-Agent: ItsMe' -H 'Authorization: Basic <AUTH>' --compressed 'https://r.cfcr.io/v2/token?account=xxxx&scope=repository%3A<user>/<name>%3Apush%2Cpull&service=r.cfcr.io'
Run Code Online (Sandbox Code Playgroud)
<AUTH>你可以通过运行来获取
echo <account>:<token> | base64
Run Code Online (Sandbox Code Playgroud)
这将返回给你一个大令牌
{"expires_in":43200,"issued_at":"2017-10-24T03:34:54.118390368-07:00","token":"APMm...P91"}%
Run Code Online (Sandbox Code Playgroud)
现在您可以使用该令牌进行 docker API 调用
$ curl -IH 'Host: r.cfcr.io' -H 'User-Agent: ItsMe' -H 'Authorization: Bearer APMm+...aRL' -X HEAD 'https://r.cfcr.io/v2/<user>/<user>/testci/blobs/sha256:c7fefcc4c54c63f32b5422ede095793eb5ff0f45ad7a22861974ec9b61e7749b'
HTTP/1.1 200 OK
Docker-Distribution-API-Version: registry/2.0
Content-Length: 22488057
Date: Tue, 24 Oct 2017 10:42:23 GMT
Content-Type: text/html
Server: Docker Registry
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Run Code Online (Sandbox Code Playgroud)
对于下面的注册表搜索访问应该有效
curl -H '主机:r.cfcr.io' -H '用户代理:ItsMe' -H '授权:基本' --compressed ' https://r.cfcr.io/v2/token?account=xxxx&scope=注册表%3Acatalog%3Asearch&service=r.cfcr.io '
但它没有,也没有registry:catalog:*范围也不是。这就像盲目地击中目标,甚至不知道我们站在哪个方向。你最好的办法是让他们向你透露一些信息
Edit-1:获取目录
于是我终于成功破解了,但是结果有点不幸。我最终获得了每个用户的目录/存储库。我查了一下,你仍然无法提取这些回购协议。所以他们的 docker 镜像本身是安全的。这些看起来像这样:
Edit-2:获取所有存储库
在我们将这种情况通知 Codefresh 后,以下是如何进行获取。首先需要使用以下命令生成一个令牌:
curl -H 'Host: r.cfcr.io' -H 'User-Agent: MyAgent' -H 'Authorization: Basic .....' --compressed 'https://r.cfcr.io/v2/token?account=<account>&service=r.cfcr.io'
Run Code Online (Sandbox Code Playgroud)
然后使用相同的方法我们可以查询完整的目录:
curl -H "User-Agent: ItsMe" -H 'Authorization: Bearer <TOKEN>' 'https://r.cfcr.io/v2/_catalog?n=10' --compressed
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
824 次 |
| 最近记录: |