Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从docker的私有1.0注册表中搜索图像?_Docker_Docker Registry - Fatal编程技术网

如何从docker的私有1.0注册表中搜索图像?

如何从docker的私有1.0注册表中搜索图像?,docker,docker-registry,Docker,Docker Registry,我做了一个私人注册,curl xx.xx.xx.xx:5000就可以了。 我通过执行以下操作将图像推入docker private registry: docker推送xx.xx.xx.xx:5000/centos 它返回: http://xx.xx.xx.xx:5000/v1/repositories/centos/tags/latest 问题是如何从注册表web或命令获取所有图像。 我无法从docker注册表api中找到任何信息。 有人帮忙吗?:) 目前还没有简单的方法可以做到这一点,因为这

我做了一个私人注册,curl xx.xx.xx.xx:5000就可以了。 我通过执行以下操作将图像推入docker private registry:
docker推送xx.xx.xx.xx:5000/centos

它返回:
http://xx.xx.xx.xx:5000/v1/repositories/centos/tags/latest

问题是如何从注册表web或命令获取所有图像。 我无法从docker注册表api中找到任何信息。
有人帮忙吗?:)

目前还没有简单的方法可以做到这一点,因为这些信息应该存储在私有注册表没有的索引中。但根据您启动注册表的方式,您有两个选项:

  • 如果您启动注册表时没有使用-v将数据存储在单独的主机文件夹中,您可以尝试使用
    docker diff
    ,这样您应该可以获得有关容器fs中更改的信息。所有推送的映像都应该位于/tmp/registry/repositories中的某个位置/
  • 若用-v启动注册表,只需检查主机上已装入目录的内容

  • 如果您使用“centos”作为名称,它应该位于/tmp/registry/repositories/library/centos中。此文件夹将包含描述图像结构的文本文件。实际数据位于/tmp/registry/images/

    中,从私有版本0.7.0开始,您可以执行以下操作:

    $ curl -X GET http://localhost:5000/v1/search?q=postgresql
    
    您将获得一个json负载:

    {"num_results": 1, "query": "postgresql", "results": [{"description": "", "name": "library/postgresql"}]}
    
    以下是我如何启动注册表的更多背景信息:

    docker run \
            -e SETTINGS_FLAVOR=local \
            -e STORAGE_PATH=/registry \
            -e SEARCH_BACKEND=sqlalchemy \
            -e LOGLEVEL=DEBUG \
            -p 5000:5000 \
            registry
    

    我安装了atc-/docker注册表web项目,该项目为我提供了UI并搜索我的私有注册表。

    它是停靠的,你可以直接运行它

    docker run -p 8080:8080 -e REG1=http://registry_host.name:5000/v1/ atcol/docker-registry-ui docker run-P8080:8080-e REG1=http://registry_host.name:5000/v1/ atcol/docker注册表用户界面
    并通过浏览到
    注册表ui\u主机查看内容。名称:8080

    现在,从docker客户端,您只需直接搜索您的私人注册表,无需使用HTTP API或任何其他工具:

    e、 g.搜索centos图像:


    docker search localhost:5000/centos

    只需搜索“库”,就可以将我的私人注册表中的所有内容都取回:

    docker search [my.registry.host]:[port]/library
    
    返回(例如):


    目前没有Docker Registry v2的搜索支持

    有一次。目前的计划是支持搜索,最后是一个,应该是

    作为一种解决方法,请在运行registry v2的计算机上执行以下操作:

    > docker exec -it <your_registry_container_id> bash
    > ls /var/lib/registry/docker/registry/v2/repositories/
    
    >docker exec-it bash
    >ls/var/lib/registry/docker/registry/v2/repositories/
    

    图像位于与其名称空间对应的子目录中,例如,
    jwilder/nginx proxy
    一行中的另一个方法(如果需要,替换实际路径/端口)

    示例:假设一个通用注册表:2.0启动, 正在运行的注册表容器有一个保存图像和标记名的日志文件。我推断数据如下:

    grep -r -o "vars\.name=.* vars.reference=.*" /var/lib/docker/containers/* | cut -c 167-225 | sed 's/ver.*$//' | sed 's/vars\.name=//' | sed 's/ vars\.reference=/:/' | sort -u
    

    您可能需要调整切割值以获得所需的输出。

    因此我知道这是一个快速变化的字段,但(截至2015-09-08年),我在

    列出存储库() 正在列出图像标记() 列出所有图像

    docker search <registry_host>:<registry_port>/
    
    docker搜索:/
    
    列出像“vcs”这样的图像

    docker search <registry_host>:<registry_port>/vcs
    
    docker搜索:/vcs
    
    修改@mre的答案,以便仅通过一个命令获取列表(至少对Docker Registry v2有效)

    docker exec-it ls-a/var/lib/registry/docker/registry/v2/repositories/
    
    对不起,我的意思是如何通过命令行或httpYes从private registry中搜索图像。我知道,但是如果没有索引,您无法在private registry中搜索图像。注册表中有
    /v1/search
    api方法,但它需要索引后端。privateregistrycode()中有基本的索引实现,但它只提供独立模式下的基本函数。几天前我发现了这一点:但没有时间测试is。我的意思是如何通过命令行或httpso从私有注册表中搜索图像这是
    search
    的未记录功能请参阅此问题的参考
    curl-X GEThttp://localhost:5000/v1/search
    可以列出完成此操作的api v2的所有图像
    http://localhost:5000/v2/_catalog
    作为记录,这对我使用Docker 1.3.1版build 4E9BBFat非常有效。这应该在cli帮助页面中明确提及@MarcelloRomani我认为这是正确的链接:在Ubuntu14.04上使用docker 1.8.1时,我从守护进程得到
    错误响应:意外状态代码404
    ,怎么了?我有同样的问题“docker search Repository_ip:5000/busybox”命令返回404,但是前面的命令“docker push repository\u ip:5000/busybox”已经成功。您可能需要对不安全的注册表使用curl,例如
    curl--unsecure-u“test:password”https://myregistrydomain.com:5000/v2/_catalog
    “如果您启动docker注册表而不启用搜索,那么此UI将无法工作,原因也不清楚。我可以添加注册表,因为它返回HTTP 200,但是当导航到图像时,UI将报告“注册表不可访问”b/c返回HTTP 404。“如果docker exec-it bash命令不起作用,请尝试docker exec-it/bin/shAlso以列出存储库的标记:docker exec-it ls-a/var/lib/registry/docker/registry/v2/repositories/postgresql/_manifests/tags
    GET /v2/<name>/tags/list
    
    $ curl -X GET http://localhost:5000/v2/_catalog
    {"repositories":["ubuntu"]}
    $ curl -X GET http://localhost:5000/v2/ubuntu/tags/list
    {"name":"ubuntu","tags":["latest"]}
    
    docker search <registry_host>:<registry_port>/
    
    docker search <registry_host>:<registry_port>/vcs
    
    docker exec -it <your_registry_container_id> ls -a /var/lib/registry/docker/registry/v2/repositories/