docs/reference/api/registry_api/index.html

1292 lines
47 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<meta name="docker_version" content="1.4.1">
<meta name="docker_git_branch" content="master">
<meta name="docker_git_commit" content="3c097c2">
<meta name="docker_build_date" content="Wed Jan 28 04:30:29 UTC 2015">
<meta name="description" content="API Documentation for Docker Registry">
<meta name="keywords" content="API, Docker, index, registry, REST, documentation">
<link rel="canonical" href="/reference/api/registry_api/">
<link href="/css/bootstrap-custom.css" rel="stylesheet">
<link href="/css/main.css" rel="stylesheet">
<link href="/css/prettify-1.0.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="/css/dockerfile_tutorial.css">
<link href="/tipuesearch/tipuesearch.css" rel="stylesheet">
<link href="/css/docs.css" rel="stylesheet">
<link rel="shortcut icon" href="/img/favicon.png">
<title>Docker Registry API - Docker Documentation</title>
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
<script type="text/javascript">
!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t){var e=document.createElement("script");e.type="text/javascript";e.async=!0;e.src=("https:"===document.location.protocol?"https://":"http://")+"cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(e,n)};analytics.SNIPPET_VERSION="4.0.0";
analytics.load("IWj9D0UpZHZdZUZX9jl98PcpBFWBnBMy");
analytics.page();
}}();
</script>
</head>
<body>
<div id="topmostnav" class="topmostnav_loggedout navbar navbar-static-top public">
<div class="container">
<a href="http://www.docker.com/" title="Homepage">
<div class="brand logo"><img src="/img/nav/docker-logo-loggedout.png"> </div>
</a>
<ul class="nav">
<li class=""><a href="http://www.docker.com/whatisdocker/" title="What is Docker">What is Docker?</a></li>
<li class=""><a href="http://www.docker.com/resources/usecases/" title="Use Cases">Use Cases</a></li>
<li class=""><a href="http://www.docker.com/tryit/" title="Try It!">Try It!</a></li>
<li class="active"><a href="https://docs.docker.com" title="Install &amp; Docs">Install &amp; Docs</a></li>
<li><a href="https://registry.hub.docker.com" title="Browse">Browse</a></li>
</ul>
<div id="usernav" class="pull-right">
<a href="https://hub.docker.com/account/login" class="btn nav-button2" title="Lg In">Log In</a>
<a href="https://hub.docker.com/account/signup" class="btn nav-button1" title="Sign Up">Sign Up</a>
</div>
</div>
</div>
<div id="topmostnav" class="topmostnav_loggedin navbar navbar-static-top">
<div class="container">
<a href="http://www.docker.com/" title="Docker Docs Home"><div class="brand logo"><img src="/img/nav/docker-logo-loggedin.png"> </div></a>
<form id="search_box_header" class="navbar-index-search pull-right" action="https://registry.hub.docker.com/search">
<span role="status" aria-live="polite" class="ui-helper-hidden-accessible"></span><input type="text" class="search-query ui-autocomplete-input" placeholder="Search..." name="q" value="" autocomplete="off">
</form>
<ul class="nav">
<li><a href="https://registry.hub.docker.com" title="Browse Repos">Browse Repos</a></li>
<li class="active"><a href="http://docs.docker.com" title="Documentation">Documentation</a></li>
<li><a href="http://www.docker.com/community/participate/" title="Community">Community</a></li>
<li><a href="http://www.docker.com/resources/help/" title="Help">Help</a></li>
</ul>
<div id="usernav" class="pull-right">
<ul class="nav user">
<li class="dropdown">
<a id="logged-in-header-username" class="dropdown-toggle" data-toggle="dropdown" href="#">
<img class="profile" src="" alt="profile picture">
</a>
<ul class="dropdown-menu pull-right">
<li><a href="https://hub.docker.com/">View Profile</a></li>
<li><a href="https://hub.docker.com/account/settings/">Settings</a></li>
<li><a href="https://hub.docker.com/repos/">My Repositories</a></li>
<li><a href="https://hub.docker.com/plans/billing-info">Billing</a></li>
<li><a href="https://hub.docker.com/account/logout/?next=/">Log out</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
<div id="wrap">
<nav id="nav_menu" class="clearfix navbar navbar-default navbar-static-top affix" role="navigation">
<div id="docsnav">
<ul id="main-nav" class="pull-left">
<li class="dd_menu pull-left">
<a href="/">About</a>
<ul class="dd_submenu" style="max-height: 75px;">
<li >
<a href="/">Docker</a>
</li>
<li >
<a href="/release-notes/">Release Notes</a>
</li>
<li >
<a href="/introduction/understanding-docker/">Understanding Docker</a>
</li>
</ul>
</li>
<li class="dd_menu pull-left">
<a href="/installation/mac/">Installation</a>
<ul class="dd_submenu" style="max-height: 75px;">
<li >
<a href="/installation/mac/">Mac OS X</a>
</li>
<li >
<a href="/installation/ubuntulinux/">Ubuntu</a>
</li>
<li >
<a href="/installation/rhel/">Red Hat Enterprise Linux</a>
</li>
<li >
<a href="/installation/oracle/">Oracle Linux</a>
</li>
<li >
<a href="/installation/centos/">CentOS</a>
</li>
<li >
<a href="/installation/debian/">Debian</a>
</li>
<li >
<a href="/installation/gentoolinux/">Gentoo</a>
</li>
<li >
<a href="/installation/google/">Google Cloud Platform</a>
</li>
<li >
<a href="/installation/rackspace/">Rackspace Cloud</a>
</li>
<li >
<a href="/installation/amazon/">Amazon EC2</a>
</li>
<li >
<a href="/installation/softlayer/">IBM Softlayer</a>
</li>
<li >
<a href="/installation/archlinux/">Arch Linux</a>
</li>
<li >
<a href="/installation/frugalware/">FrugalWare</a>
</li>
<li >
<a href="/installation/fedora/">Fedora</a>
</li>
<li >
<a href="/installation/SUSE/">SUSE</a>
</li>
<li >
<a href="/installation/cruxlinux/">CRUX Linux</a>
</li>
<li >
<a href="/installation/windows/">Microsoft Windows</a>
</li>
<li >
<a href="/installation/binaries/">Binaries</a>
</li>
</ul>
</li>
<li class="dd_menu pull-left">
<a href="/userguide/">User Guide</a>
<ul class="dd_submenu" style="max-height: 75px;">
<li >
<a href="/userguide/">The Docker User Guide</a>
</li>
<li >
<a href="/userguide/dockerhub/">Getting Started with Docker Hub</a>
</li>
<li >
<a href="/userguide/dockerizing/">Dockerizing Applications</a>
</li>
<li >
<a href="/userguide/usingdocker/">Working with Containers</a>
</li>
<li >
<a href="/userguide/dockerimages/">Working with Docker Images</a>
</li>
<li >
<a href="/userguide/dockerlinks/">Linking containers together</a>
</li>
<li >
<a href="/userguide/dockervolumes/">Managing data in containers</a>
</li>
<li >
<a href="/userguide/dockerrepos/">Working with Docker Hub</a>
</li>
</ul>
</li>
<li class="dd_menu pull-left">
<a href="/docker-hub/">Docker Hub</a>
<ul class="dd_submenu" style="max-height: 75px;">
<li >
<a href="/docker-hub/">Docker Hub</a>
</li>
<li >
<a href="/docker-hub/accounts/">Accounts</a>
</li>
<li >
<a href="/docker-hub/repos/">Repositories</a>
</li>
<li >
<a href="/docker-hub/builds/">Automated Builds</a>
</li>
<li >
<a href="/docker-hub/official_repos/">Official Repo Guidelines</a>
</li>
</ul>
</li>
<li class="dd_menu pull-left">
<a href="/examples/nodejs_web_app/">Examples</a>
<ul class="dd_submenu" style="max-height: 75px;">
<li >
<a href="/examples/nodejs_web_app/">Dockerizing a Node.js web application</a>
</li>
<li >
<a href="/examples/mongodb/">Dockerizing MongoDB</a>
</li>
<li >
<a href="/examples/running_redis_service/">Dockerizing a Redis service</a>
</li>
<li >
<a href="/examples/postgresql_service/">Dockerizing a PostgreSQL service</a>
</li>
<li >
<a href="/examples/running_riak_service/">Dockerizing a Riak service</a>
</li>
<li >
<a href="/examples/running_ssh_service/">Dockerizing an SSH service</a>
</li>
<li >
<a href="/examples/couchdb_data_volumes/">Dockerizing a CouchDB service</a>
</li>
<li >
<a href="/examples/apt-cacher-ng/">Dockerizing an Apt-Cacher-ng service</a>
</li>
</ul>
</li>
<li class="dd_menu pull-left">
<a href="/articles/basics/">Articles</a>
<ul class="dd_submenu" style="max-height: 75px;">
<li >
<a href="/articles/basics/">Docker basics</a>
</li>
<li >
<a href="/articles/networking/">Advanced networking</a>
</li>
<li >
<a href="/articles/security/">Security</a>
</li>
<li >
<a href="/articles/https/">Running Docker with HTTPS</a>
</li>
<li >
<a href="/articles/registry_mirror/">Run a local registry mirror</a>
</li>
<li >
<a href="/articles/host_integration/">Automatically starting containers</a>
</li>
<li >
<a href="/articles/baseimages/">Creating a base image</a>
</li>
<li >
<a href="/articles/dockerfile_best-practices/">Best practices for writing Dockerfiles</a>
</li>
<li >
<a href="/articles/certificates/">Using certificates for repository client verification</a>
</li>
<li >
<a href="/articles/using_supervisord/">Using Supervisor</a>
</li>
<li >
<a href="/articles/cfengine_process_management/">Process management with CFEngine</a>
</li>
<li >
<a href="/articles/puppet/">Using Puppet</a>
</li>
<li >
<a href="/articles/chef/">Using Chef</a>
</li>
<li >
<a href="/articles/dsc/">Using PowerShell DSC</a>
</li>
<li >
<a href="/articles/ambassador_pattern_linking/">Cross-Host linking using ambassador containers</a>
</li>
<li >
<a href="/articles/runmetrics/">Runtime metrics</a>
</li>
<li >
<a href="/articles/b2d_volume_resize/">Increasing a Boot2Docker volume</a>
</li>
<li >
<a href="/articles/systemd/">Controlling and configuring Docker using Systemd</a>
</li>
</ul>
</li>
<li class="dd_menu pull-left active">
<a href="/reference/commandline/cli/">Reference</a>
<ul class="dd_submenu" style="max-height: 75px;">
<li >
<a href="/reference/commandline/cli/">Command line</a>
</li>
<li >
<a href="/reference/builder/">Dockerfile</a>
</li>
<li >
<a href="/faq/">FAQ</a>
</li>
<li >
<a href="/reference/run/">Run Reference</a>
</li>
<li >
<a href="/reference/api/docker-io_api/">Docker Hub API</a>
</li>
<li class="active">
<a href="/reference/api/registry_api/">Docker Registry API</a>
</li>
<li >
<a href="/reference/api/registry_api_client_libraries/">Docker Registry API Client Libraries</a>
</li>
<li >
<a href="/reference/api/hub_registry_spec/">Docker Hub and Registry Spec</a>
</li>
<li >
<a href="/reference/api/docker_remote_api/">Docker Remote API</a>
</li>
<li >
<a href="/reference/api/docker_remote_api_v1.16/">Docker Remote API v1.16</a>
</li>
<li >
<a href="/reference/api/docker_remote_api_v1.15/">Docker Remote API v1.15</a>
</li>
<li >
<a href="/reference/api/docker_remote_api_v1.14/">Docker Remote API v1.14</a>
</li>
<li >
<a href="/reference/api/docker_remote_api_v1.13/">Docker Remote API v1.13</a>
</li>
<li >
<a href="/reference/api/docker_remote_api_v1.12/">Docker Remote API v1.12</a>
</li>
<li >
<a href="/reference/api/docker_remote_api_v1.11/">Docker Remote API v1.11</a>
</li>
<li >
<a href="/reference/api/remote_api_client_libraries/">Docker Remote API Client Libraries</a>
</li>
<li >
<a href="/reference/api/docker_io_accounts_api/">Docker Hub Accounts API</a>
</li>
</ul>
</li>
<li class="dd_menu pull-left">
<a href="/contributing/contributing/">Contribute</a>
<ul class="dd_submenu" style="max-height: 75px;">
<li >
<a href="/contributing/contributing/">Contributing</a>
</li>
<li >
<a href="/contributing/devenvironment/">Development environment</a>
</li>
<li >
<a href="/contributing/docs_style-guide/">Documentation style guide</a>
</li>
</ul>
</li>
</ul>
<form id="nav_search" class="pull-right" action="/jsearch/">
<span role="status" aria-live="polite" class="ui-helper-hidden-accessible"></span>
<input name="q" id="tipue_search_input" type="text" class="search_input search-query ui-autocomplete-input" placeholder="Search the Docs" autocomplete="off">
</form>
</div>
</nav>
<div id="content" class="container">
<div class="row">
<div class="span3" id="leftnav">
<div id="toc_table">
<ul class="nav nav-tabs nav-stacked">
<li class=""><a href="#introduction">Introduction</a></li>
<li class=""><a href="#images">Images</a></li>
<h3><a href="#get-image-layer">Get image layer</a></h3>
<h3><a href="#put-image-layer">Put image layer</a></h3>
<li class=""><a href="#image">Image</a></li>
<h3><a href="#put-image-layer_1">Put image layer</a></h3>
<h3><a href="#get-image-layer_1">Get image layer</a></h3>
<li class=""><a href="#ancestry">Ancestry</a></li>
<h3><a href="#get-image-ancestry">Get image ancestry</a></h3>
<li class=""><a href="#tags">Tags</a></li>
<h3><a href="#list-repository-tags">List repository tags</a></h3>
<h3><a href="#get-image-id-for-a-particular-tag">Get image id for a particular tag</a></h3>
<h3><a href="#delete-a-repository-tag">Delete a repository tag</a></h3>
<h3><a href="#set-a-tag-for-a-specified-image-id">Set a tag for a specified image id</a></h3>
<li class=""><a href="#repositories">Repositories</a></li>
<h3><a href="#delete-a-repository">Delete a repository</a></h3>
<li class=""><a href="#search">Search</a></li>
<li class=""><a href="#status">Status</a></li>
<h3><a href="#status-check-for-registry">Status check for registry</a></h3>
<li class=""><a href="#authorization">Authorization</a></li>
</ul>
</div>
</div>
<div class="span9 content-body">
<div id="versionnav" class="span3 pull-right invisible">
<ul class="nav version pull-right">
<li class="dropdown">
<a id="document-version-number" class="dropdown-toggle" data-toggle="dropdown" href="#">
Version v1.4
</a>
<ul id="documentation-version-list" class="dropdown-menu pull-right">
<li role="presentation" class="divider"></li>
<li> <a class="home-link3 tertiary-nav" href="https://github.com/docker/docker/blob/master/docs/sources/reference/api/registry_api.md" >Edit on GitHub</a></li>
</ul>
</li>
</ul>
</div>
<h1 id="docker-registry-api">Docker Registry API</h1>
<h2 id="introduction">Introduction</h2>
<ul>
<li>This is the REST API for the Docker Registry</li>
<li>It stores the images and the graph for a set of repositories</li>
<li>It does not have user accounts data</li>
<li>It has no notion of user accounts or authorization</li>
<li>It delegates authentication and authorization to the Index Auth
service using tokens</li>
<li>It supports different storage backends (S3, cloud files, local FS)</li>
<li>It doesn't have a local database</li>
<li>The registry is open source: <a href="https://github.com/docker/docker-registry">Docker Registry</a></li>
</ul>
<p>We expect that there will be multiple registries out there. To help to
grasp the context, here are some examples of registries:</p>
<ul>
<li><strong>sponsor registry</strong>: such a registry is provided by a third-party
hosting infrastructure as a convenience for their customers and the
Docker community as a whole. Its costs are supported by the third
party, but the management and operation of the registry are
supported by Docker. It features read/write access, and delegates
authentication and authorization to the Index.</li>
<li><strong>mirror registry</strong>: such a registry is provided by a third-party
hosting infrastructure but is targeted at their customers only. Some
mechanism (unspecified to date) ensures that public images are
pulled from a sponsor registry to the mirror registry, to make sure
that the customers of the third-party provider can <code>docker pull</code>
those images locally.</li>
<li><strong>vendor registry</strong>: such a registry is provided by a software
vendor, who wants to distribute Docker images. It would be operated
and managed by the vendor. Only users authorized by the vendor would
be able to get write access. Some images would be public (accessible
for anyone), others private (accessible only for authorized users).
Authentication and authorization would be delegated to the Index.
The goal of vendor registries is to let someone do <code>docker pull
basho/riak1.3</code> and automatically push from the vendor registry
(instead of a sponsor registry); i.e., get all the convenience of a
sponsor registry, while retaining control on the asset distribution.</li>
<li><strong>private registry</strong>: such a registry is located behind a firewall,
or protected by an additional security layer (HTTP authorization,
SSL client-side certificates, IP address authorization...). The
registry is operated by a private entity, outside of Docker's
control. It can optionally delegate additional authorization to the
Index, but it is not mandatory.</li>
</ul>
<blockquote>
<p><strong>Note</strong>:
Mirror registries and private registries which do not use the Index
don't even need to run the registry code. They can be implemented by any
kind of transport implementing HTTP GET and PUT. Read-only registries
can be powered by a simple static HTTPS server.</p>
<p><strong>Note</strong>:
The latter implies that while HTTP is the protocol of choice for a registry,
multiple schemes are possible (and in some cases, trivial):</p>
<ul>
<li>HTTP with GET (and PUT for read-write registries);</li>
<li>local mount point;</li>
<li>remote Docker addressed through SSH.</li>
</ul>
</blockquote>
<p>The latter would only require two new commands in Docker, e.g.,
<code>registryget</code> and <code>registryput</code>, wrapping access to the local filesystem
(and optionally doing consistency checks). Authentication and authorization
are then delegated to SSH (e.g., with public keys).</p>
<blockquote>
<p><strong>Note</strong>:
Private registry servers that expose an HTTP endpoint need to be secured with
TLS (preferably TLSv1.2, but at least TLSv1.0). Make sure to put the CA
certificate at /etc/docker/certs.d/my.registry.com:5000/ca.crt on the Docker
host, so that the daemon can securely access the private registry.
Support for SSLv3 and lower is not available due to security issues.</p>
</blockquote>
<p>The default namespace for a private repository is <code>library</code>.</p>
<h1 id="endpoints">Endpoints</h1>
<h2 id="images">Images</h2>
<h3 id="get-image-layer">Get image layer</h3>
<p><code>GET /v1/images/(image_id)/layer</code></p>
<p>Get image layer for a given <code>image_id</code></p>
<p><strong>Example Request</strong>:</p>
<pre class="prettyprint well"><code> GET /v1/images/088b4505aa3adc3d35e79c031fa126b403200f02f51920fbd9b7c503e87c7a2c/layer HTTP/1.1
Host: registry-1.docker.io
Accept: application/json
Content-Type: application/json
Authorization: Token signature=123abc,repository="foo/bar",access=read
</code></pre>
<p>Parameters:</p>
<ul>
<li><strong>image_id</strong> the id for the layer you want to get</li>
</ul>
<p><strong>Example Response</strong>:</p>
<pre class="prettyprint well"><code> HTTP/1.1 200
Vary: Accept
X-Docker-Registry-Version: 0.6.0
Cookie: (Cookie provided by the Registry)
{layer binary data stream}
</code></pre>
<p>Status Codes:</p>
<ul>
<li><strong>200</strong> OK</li>
<li><strong>401</strong> Requires authorization</li>
<li><strong>404</strong> Image not found</li>
</ul>
<h3 id="put-image-layer">Put image layer</h3>
<p><code>PUT /v1/images/(image_id)/layer</code></p>
<p>Put image layer for a given <code>image_id</code></p>
<p><strong>Example Request</strong>:</p>
<pre class="prettyprint well"><code> PUT /v1/images/088b4505aa3adc3d35e79c031fa126b403200f02f51920fbd9b7c503e87c7a2c/layer HTTP/1.1
Host: registry-1.docker.io
Transfer-Encoding: chunked
Authorization: Token signature=123abc,repository="foo/bar",access=write
{layer binary data stream}
</code></pre>
<p>Parameters:</p>
<ul>
<li><strong>image_id</strong> the id for the layer you want to get</li>
</ul>
<p><strong>Example Response</strong>:</p>
<pre class="prettyprint well"><code> HTTP/1.1 200
Vary: Accept
Content-Type: application/json
X-Docker-Registry-Version: 0.6.0
""
</code></pre>
<p>Status Codes:</p>
<ul>
<li><strong>200</strong> OK</li>
<li><strong>401</strong> Requires authorization</li>
<li><strong>404</strong> Image not found</li>
</ul>
<h2 id="image">Image</h2>
<h3 id="put-image-layer_1">Put image layer</h3>
<p><code>PUT /v1/images/(image_id)/json</code></p>
<p>Put image for a given <code>image_id</code></p>
<p><strong>Example Request</strong>:</p>
<pre class="prettyprint well"><code> PUT /v1/images/088b4505aa3adc3d35e79c031fa126b403200f02f51920fbd9b7c503e87c7a2c/json HTTP/1.1
Host: registry-1.docker.io
Accept: application/json
Content-Type: application/json
Cookie: (Cookie provided by the Registry)
{
id: "088b4505aa3adc3d35e79c031fa126b403200f02f51920fbd9b7c503e87c7a2c",
parent: "aeee6396d62273d180a49c96c62e45438d87c7da4a5cf5d2be6bee4e21bc226f",
created: "2013-04-30T17:46:10.843673+03:00",
container: "8305672a76cc5e3d168f97221106ced35a76ec7ddbb03209b0f0d96bf74f6ef7",
container_config: {
Hostname: "host-test",
User: "",
Memory: 0,
MemorySwap: 0,
AttachStdin: false,
AttachStdout: false,
AttachStderr: false,
PortSpecs: null,
Tty: false,
OpenStdin: false,
StdinOnce: false,
Env: null,
Cmd: [
"/bin/bash",
"-c",
"apt-get -q -yy -f install libevent-dev"
],
Dns: null,
Image: "imagename/blah",
Volumes: { },
VolumesFrom: ""
},
docker_version: "0.1.7"
}
</code></pre>
<p>Parameters:</p>
<ul>
<li><strong>image_id</strong> the id for the layer you want to get</li>
</ul>
<p><strong>Example Response</strong>:</p>
<pre class="prettyprint well"><code> HTTP/1.1 200
Vary: Accept
Content-Type: application/json
X-Docker-Registry-Version: 0.6.0
""
</code></pre>
<p>Status Codes:</p>
<ul>
<li><strong>200</strong> OK</li>
<li><strong>401</strong> Requires authorization</li>
</ul>
<h3 id="get-image-layer_1">Get image layer</h3>
<p><code>GET /v1/images/(image_id)/json</code></p>
<p>Get image for a given <code>image_id</code></p>
<p><strong>Example Request</strong>:</p>
<pre class="prettyprint well"><code> GET /v1/images/088b4505aa3adc3d35e79c031fa126b403200f02f51920fbd9b7c503e87c7a2c/json HTTP/1.1
Host: registry-1.docker.io
Accept: application/json
Content-Type: application/json
Cookie: (Cookie provided by the Registry)
</code></pre>
<p>Parameters:</p>
<ul>
<li><strong>image_id</strong> the id for the layer you want to get</li>
</ul>
<p><strong>Example Response</strong>:</p>
<pre class="prettyprint well"><code> HTTP/1.1 200
Vary: Accept
Content-Type: application/json
X-Docker-Registry-Version: 0.6.0
X-Docker-Size: 456789
X-Docker-Checksum: b486531f9a779a0c17e3ed29dae8f12c4f9e89cc6f0bc3c38722009fe6857087
{
id: "088b4505aa3adc3d35e79c031fa126b403200f02f51920fbd9b7c503e87c7a2c",
parent: "aeee6396d62273d180a49c96c62e45438d87c7da4a5cf5d2be6bee4e21bc226f",
created: "2013-04-30T17:46:10.843673+03:00",
container: "8305672a76cc5e3d168f97221106ced35a76ec7ddbb03209b0f0d96bf74f6ef7",
container_config: {
Hostname: "host-test",
User: "",
Memory: 0,
MemorySwap: 0,
AttachStdin: false,
AttachStdout: false,
AttachStderr: false,
PortSpecs: null,
Tty: false,
OpenStdin: false,
StdinOnce: false,
Env: null,
Cmd: [
"/bin/bash",
"-c",
"apt-get -q -yy -f install libevent-dev"
],
Dns: null,
Image: "imagename/blah",
Volumes: { },
VolumesFrom: ""
},
docker_version: "0.1.7"
}
</code></pre>
<p>Status Codes:</p>
<ul>
<li><strong>200</strong> OK</li>
<li><strong>401</strong> Requires authorization</li>
<li><strong>404</strong> Image not found</li>
</ul>
<h2 id="ancestry">Ancestry</h2>
<h3 id="get-image-ancestry">Get image ancestry</h3>
<p><code>GET /v1/images/(image_id)/ancestry</code></p>
<p>Get ancestry for an image given an <code>image_id</code></p>
<p><strong>Example Request</strong>:</p>
<pre class="prettyprint well"><code> GET /v1/images/088b4505aa3adc3d35e79c031fa126b403200f02f51920fbd9b7c503e87c7a2c/ancestry HTTP/1.1
Host: registry-1.docker.io
Accept: application/json
Content-Type: application/json
Cookie: (Cookie provided by the Registry)
</code></pre>
<p>Parameters:</p>
<ul>
<li><strong>image_id</strong> the id for the layer you want to get</li>
</ul>
<p><strong>Example Response</strong>:</p>
<pre class="prettyprint well"><code> HTTP/1.1 200
Vary: Accept
Content-Type: application/json
X-Docker-Registry-Version: 0.6.0
["088b4502f51920fbd9b7c503e87c7a2c05aa3adc3d35e79c031fa126b403200f",
"aeee63968d87c7da4a5cf5d2be6bee4e21bc226fd62273d180a49c96c62e4543",
"bfa4c5326bc764280b0863b46a4b20d940bc1897ef9c1dfec060604bdc383280",
"6ab5893c6927c15a15665191f2c6cf751f5056d8b95ceee32e43c5e8a3648544"]
</code></pre>
<p>Status Codes:</p>
<ul>
<li><strong>200</strong> OK</li>
<li><strong>401</strong> Requires authorization</li>
<li><strong>404</strong> Image not found</li>
</ul>
<h2 id="tags">Tags</h2>
<h3 id="list-repository-tags">List repository tags</h3>
<p><code>GET /v1/repositories/(namespace)/(repository)/tags</code></p>
<p>Get all of the tags for the given repo.</p>
<p><strong>Example Request</strong>:</p>
<pre class="prettyprint well"><code> GET /v1/repositories/reynholm/help-system-server/tags HTTP/1.1
Host: registry-1.docker.io
Accept: application/json
Content-Type: application/json
X-Docker-Registry-Version: 0.6.0
Cookie: (Cookie provided by the Registry)
</code></pre>
<p>Parameters:</p>
<ul>
<li><strong>namespace</strong> namespace for the repo</li>
<li><strong>repository</strong> name for the repo</li>
</ul>
<p><strong>Example Response</strong>:</p>
<pre class="prettyprint well"><code> HTTP/1.1 200
Vary: Accept
Content-Type: application/json
X-Docker-Registry-Version: 0.6.0
{
"latest": "9e89cc6f0bc3c38722009fe6857087b486531f9a779a0c17e3ed29dae8f12c4f",
"0.1.1": "b486531f9a779a0c17e3ed29dae8f12c4f9e89cc6f0bc3c38722009fe6857087"
}
</code></pre>
<p>Status Codes:</p>
<ul>
<li><strong>200</strong> OK</li>
<li><strong>401</strong> Requires authorization</li>
<li><strong>404</strong> Repository not found</li>
</ul>
<h3 id="get-image-id-for-a-particular-tag">Get image id for a particular tag</h3>
<p><code>GET /v1/repositories/(namespace)/(repository)/tags/(tag*)</code></p>
<p>Get a tag for the given repo.</p>
<p><strong>Example Request</strong>:</p>
<pre class="prettyprint well"><code> GET /v1/repositories/reynholm/help-system-server/tags/latest HTTP/1.1
Host: registry-1.docker.io
Accept: application/json
Content-Type: application/json
X-Docker-Registry-Version: 0.6.0
Cookie: (Cookie provided by the Registry)
</code></pre>
<p>Parameters:</p>
<ul>
<li><strong>namespace</strong> namespace for the repo</li>
<li><strong>repository</strong> name for the repo</li>
<li><strong>tag</strong> name of tag you want to get</li>
</ul>
<p><strong>Example Response</strong>:</p>
<pre class="prettyprint well"><code> HTTP/1.1 200
Vary: Accept
Content-Type: application/json
X-Docker-Registry-Version: 0.6.0
"9e89cc6f0bc3c38722009fe6857087b486531f9a779a0c17e3ed29dae8f12c4f"
</code></pre>
<p>Status Codes:</p>
<ul>
<li><strong>200</strong> OK</li>
<li><strong>401</strong> Requires authorization</li>
<li><strong>404</strong> Tag not found</li>
</ul>
<h3 id="delete-a-repository-tag">Delete a repository tag</h3>
<p><code>DELETE /v1/repositories/(namespace)/(repository)/tags/(tag*)</code></p>
<p>Delete the tag for the repo</p>
<p><strong>Example Request</strong>:</p>
<pre class="prettyprint well"><code> DELETE /v1/repositories/reynholm/help-system-server/tags/latest HTTP/1.1
Host: registry-1.docker.io
Accept: application/json
Content-Type: application/json
Cookie: (Cookie provided by the Registry)
</code></pre>
<p>Parameters:</p>
<ul>
<li><strong>namespace</strong> namespace for the repo</li>
<li><strong>repository</strong> name for the repo</li>
<li><strong>tag</strong> name of tag you want to delete</li>
</ul>
<p><strong>Example Response</strong>:</p>
<pre class="prettyprint well"><code> HTTP/1.1 200
Vary: Accept
Content-Type: application/json
X-Docker-Registry-Version: 0.6.0
""
</code></pre>
<p>Status Codes:</p>
<ul>
<li><strong>200</strong> OK</li>
<li><strong>401</strong> Requires authorization</li>
<li><strong>404</strong> Tag not found</li>
</ul>
<h3 id="set-a-tag-for-a-specified-image-id">Set a tag for a specified image id</h3>
<p><code>PUT /v1/repositories/(namespace)/(repository)/tags/(tag*)</code></p>
<p>Put a tag for the given repo.</p>
<p><strong>Example Request</strong>:</p>
<pre class="prettyprint well"><code> PUT /v1/repositories/reynholm/help-system-server/tags/latest HTTP/1.1
Host: registry-1.docker.io
Accept: application/json
Content-Type: application/json
Cookie: (Cookie provided by the Registry)
"9e89cc6f0bc3c38722009fe6857087b486531f9a779a0c17e3ed29dae8f12c4f"
</code></pre>
<p>Parameters:</p>
<ul>
<li><strong>namespace</strong> namespace for the repo</li>
<li><strong>repository</strong> name for the repo</li>
<li><strong>tag</strong> name of tag you want to add</li>
</ul>
<p><strong>Example Response</strong>:</p>
<pre class="prettyprint well"><code> HTTP/1.1 200
Vary: Accept
Content-Type: application/json
X-Docker-Registry-Version: 0.6.0
""
</code></pre>
<p>Status Codes:</p>
<ul>
<li><strong>200</strong> OK</li>
<li><strong>400</strong> Invalid data</li>
<li><strong>401</strong> Requires authorization</li>
<li><strong>404</strong> Image not found</li>
</ul>
<h2 id="repositories">Repositories</h2>
<h3 id="delete-a-repository">Delete a repository</h3>
<p><code>DELETE /v1/repositories/(namespace)/(repository)/</code></p>
<p>Delete a repository</p>
<p><strong>Example Request</strong>:</p>
<pre class="prettyprint well"><code> DELETE /v1/repositories/reynholm/help-system-server/ HTTP/1.1
Host: registry-1.docker.io
Accept: application/json
Content-Type: application/json
Cookie: (Cookie provided by the Registry)
""
</code></pre>
<p>Parameters:</p>
<ul>
<li><strong>namespace</strong> namespace for the repo</li>
<li><strong>repository</strong> name for the repo</li>
</ul>
<p><strong>Example Response</strong>:</p>
<pre class="prettyprint well"><code> HTTP/1.1 200
Vary: Accept
Content-Type: application/json
X-Docker-Registry-Version: 0.6.0
""
</code></pre>
<p>Status Codes:</p>
<ul>
<li><strong>200</strong> OK</li>
<li><strong>401</strong> Requires authorization</li>
<li><strong>404</strong> Repository not found</li>
</ul>
<h2 id="search">Search</h2>
<p>If you need to search the index, this is the endpoint you would use.</p>
<p><code>GET /v1/search</code></p>
<p>Search the Index given a search term. It accepts</p>
<pre class="prettyprint well"><code>[GET](http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3)
only.
</code></pre>
<p><strong>Example request</strong>:</p>
<pre class="prettyprint well"><code> GET /v1/search?q=search_term&amp;page=1&amp;n=25 HTTP/1.1
Host: index.docker.io
Accept: application/json
</code></pre>
<p>Query Parameters:</p>
<ul>
<li><strong>q</strong> what you want to search for</li>
<li><strong>n</strong> - number of results you want returned per page (default: 25, min:1, max:100)</li>
<li><strong>page</strong> - page number of results</li>
</ul>
<p><strong>Example response</strong>:</p>
<pre class="prettyprint well"><code> HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{"num_pages": 1,
"num_results": 3,
"results" : [
{"name": "ubuntu", "description": "An ubuntu image..."},
{"name": "centos", "description": "A centos image..."},
{"name": "fedora", "description": "A fedora image..."}
],
"page_size": 25,
"query":"search_term",
"page": 1
}
</code></pre>
<p>Response Items:
- <strong>num_pages</strong> - Total number of pages returned by query
- <strong>num_results</strong> - Total number of results returned by query
- <strong>results</strong> - List of results for the current page
- <strong>page_size</strong> - How many results returned per page
- <strong>query</strong> - Your search term
- <strong>page</strong> - Current page number</p>
<p>Status Codes:</p>
<ul>
<li><strong>200</strong> no error</li>
<li><strong>500</strong> server error</li>
</ul>
<h2 id="status">Status</h2>
<h3 id="status-check-for-registry">Status check for registry</h3>
<p><code>GET /v1/_ping</code></p>
<p>Check status of the registry. This endpoint is also used to
determine if the registry supports SSL.</p>
<p><strong>Example Request</strong>:</p>
<pre class="prettyprint well"><code> GET /v1/_ping HTTP/1.1
Host: registry-1.docker.io
Accept: application/json
Content-Type: application/json
""
</code></pre>
<p><strong>Example Response</strong>:</p>
<pre class="prettyprint well"><code> HTTP/1.1 200
Vary: Accept
Content-Type: application/json
X-Docker-Registry-Version: 0.6.0
""
</code></pre>
<p>Status Codes:</p>
<ul>
<li><strong>200</strong> OK</li>
</ul>
<h2 id="authorization">Authorization</h2>
<p>This is where we describe the authorization process, including the
tokens and cookies.</p>
</div>
</div>
</div>
<div id="push-footer"></div>
</div>
<div id="footer-container" class="container">
<div id="footer" class="grey-body">
<div class="row">
<div class="span2">
<span class="footer-title">Community</span>
<ul class="unstyled">
<li><a class="primary-button" href="https://www.docker.com/community/events/">Events</a></li>
<li><a class="primary-button" href="http://posts.docker.com">Friends' Posts</a></li>
<li><a class="primary-button" href="https://www.docker.com/community/meetups/">Meetups</a></li>
<li><a class="primary-button" href="https://www.docker.com/community/governance/">Governance</a></li>
<li><a class="primary-button" href="http://forums.docker.com">Forums</a></li>
<li><a class="primary-button" href="http://botbot.me/freenode/docker">IRC</a></li>
<li><a class="primary-button" href="https://github.com/docker/docker">GitHub</a></li>
<li><a class="primary-button" href="http://stackoverflow.com/search?q=docker">Stackoverflow</a></li>
<li><a class="primary-button" href="http://www.cafepress.com/docker">Swag</a></li>
</ul>
</div>
<div class="span2">
<span class="footer-title">Enterprise</span>
<ul class="unstyled">
<li><a class="primary-button" href="https://www.docker.com/enterprise/support/">Support</a></li>
<li><a class="primary-button" href="https://www.docker.com/enterprise/education/">Education</a></li>
<li><a class="primary-button" href="https://www.docker.com/enterprise/services/">Services</a></li>
</ul>
<span class="footer-title">Partner Solutions</span>
<ul class="unstyled">
<li><a class="primary-button" href="https://www.docker.com/partners/find/">Find a Partner</a></li>
<li><a class="primary-button" href="https://www.docker.com/partners/program/">Partner Program</a></li>
<li><a class="primary-button" href="https://www.docker.com/partners/learn/">Learn More</a></li>
</ul>
</div>
<div class="span2">
<span class="footer-title">Resources</span>
<ul class="unstyled">
<li><a class="primary-button" href="https://docs.docker.com">Documentation</a></li>
<li><a class="primary-button" href="https://www.docker.com/resources/help/">Help</a></li>
<li><a class="primary-button" href="https://www.docker.com/resources/usecases/">Use Cases</a></li>
<li><a class="primary-button" href="http://www.docker.com/tryit/">Online Tutorial</a></li>
<li><a class="primary-button" href="https://www.docker.com/resources/howtobuy/">How To Buy</a></li>
<li><a class="primary-button" href="http://status.docker.com">Status</a></li>
<li><a class="primary-button" href="https://www.docker.com/resources/security/">Security</a></li>
</ul>
</div>
<div class="span2">
<span class="footer-title">Company</span>
<ul class="unstyled">
<li><a class="primary-button" href="https://www.docker.com/company/aboutus/">About Us</a></li>
<li><a class="primary-button" href="https://www.docker.com/company/team/">Team</a></li>
<li><a class="primary-button" href="https://www.docker.com/company/news/">News</a></li>
<li><a class="primary-button" href="https://www.docker.com/company/press/">Press</a></li>
<li><a class="primary-button" href="https://www.docker.com/company/careers/">Careers</a></li>
<li><a class="primary-button" href="https://www.docker.com/company/contact/">Contact</a></li>
</ul>
</div>
<div class="span3">
<span class="footer-title">Connect</span>
<div class="search">
<span>Subscribe to our newsletter</span>
<form action="https://www.docker.com/subscribe_newsletter/" method="post">
<input type='hidden' name='csrfmiddlewaretoken' value='aWL78QXQkY8DSKNYh6cl08p5eTLl7sOa' />
<tr><th><label for="id_email">Email:</label></th><td><input class="form-control" id="id_email" name="email" placeholder="Enter your email" type="text" /></td></tr>
<button type="submit"><i class="icon-arrow-right"></i> </button>
</form>
</div>
<ul class="unstyled social">
<li><a title="Docker on Twitter" class="primary-button blog" href="http://blog.docker.com">Blog</a></li>
<li><a title="Docker on Twitter" class="primary-button twitter" href="http://twitter.com/docker">Twitter</a></li>
<li><a title="Docker on Google+" class="primary-button googleplus" href="https://plus.google.com/u/0/communities/108146856671494713993">Google+</a></li>
<li><a title="Docker on Facebook" class="primary-button facebook" href="https://www.facebook.com/docker.run">Facebook</a></li>
<li><a title="Docker on Youtube" class="primary-button youtube" href="http://www.youtube.com/user/dockerrun">YouTube</a></li>
</ul>
<ul class="unstyled social">
<li><a title="Docker on SlideShare" class="primary-button slideshare" href="http://www.slideshare.net/Docker">Slideshare</a></li>
<li>
<a title="Docker on LinkedIn" class="primary-button" href="https://www.linkedin.com/company/docker">
<span class="linkedin"></span>
LinkedIn
</a>
</li>
<li>
<a title="Docker on GitHub" class="primary-button" href="https://github.com/docker/">
<span class="github"></span>
GitHub
</a>
</li>
<li>
<a title="Docker on Reddit" class="primary-button" href="http://www.reddit.com/r/docker">
<span class="reddit"></span>
Reddit
</a>
</li>
<li>
<a title="Docker on AngelList" class="primary-button" href="https://angel.co/docker-inc-1">
<span class="angellist"></span>
AngelList
</a>
</li>
</ul>
</div>
</div>
<div class="row clearfix">
<div class="span6 pagination-right copyright">
<span>&copy; 2014-2015 Docker, Inc.</span>
</div>
<div class="span6 pagination-left copyright">
<a href="http://www.docker.com/legal/terms_of_service">Terms</a> &middot;
<a href="http://www.docker.com/legal/privacy_policy">Privacy</a> &middot;
<a href="http://www.docker.com/legal/trademark_guidelines">Trademarks</a>
</div>
</div>
</div>
</div>
<script src="/js/jquery-1.10.2.min.js"></script>
<script src="/js/jquery.cookie.js" ></script>
<script src="/js/jquery-scrolltofixed-min.js"></script>
<script src="/js/bootstrap-3.0.3.min.js"></script>
<script src="/js/prettify-1.0.min.js"></script>
<script src="/js/dockerfile_tutorial.js"></script>
<script src="/js/dockerfile_tutorial_level.js"></script>
<script src="/js/base.js"></script>
<script src="/tipuesearch/tipuesearch_set.js"></script>
<script src="/tipuesearch/tipuesearch.min.js"></script>
<script type="text/javascript">
piAId = '45082';
piCId = '1482';
(function() {
function async_load(){
var s = document.createElement('script'); s.type = 'text/javascript';
s.src = ('https:' == document.location.protocol ? 'https://pi' : 'http://cdn') + '.pardot.com/pd.js';
var c = document.getElementsByTagName('script')[0]; c.parentNode.insertBefore(s, c);
}
if(window.attachEvent) { window.attachEvent('onload', async_load); }
else { window.addEventListener('load', async_load, false); }
})();
</script>
<script type="text/javascript">
$(document).ready(function() {
$('#content').css("min-height", $(window).height() - 553 );
// if the URL contains a version string, update the version picker to reflect that
version = document.location.pathname.match(/^\/(v\d\.\d)\/.*/)
if (version && version[1]) {
$('#document-version-number')[0].text = 'Version '+version[1];
} else {
$('#document-version-number')[0].text = $('#document-version-number')[0].text + " (Latest)"
}
// load the complete versions list
$.get("/versions.html_fragment", function( data ) {
$('#documentation-version-list').prepend(data);
//remove any "/v1.1/" bits from front, so we can add the path to the version selection dropdown.
path = document.location.pathname.replace(/^\/v\d\.\d/, "");
$('#documentation-version-list a.version').each(function(i, e) {
e.href = e.href+path;
$(e).removeClass()
});
});
})
var userName = getCookie('docker_sso_username');
if (userName) {
$('.topmostnav_loggedout').hide();
$('.topmostnav_loggedin').show();
$('#logged-in-header-username').text(userName);
} else {
$('.topmostnav_loggedout').show();
$('.topmostnav_loggedin').hide();
}
</script>
</body>
</html>