Skip to content

Latest commit

 

History

History
546 lines (353 loc) · 12.7 KB

docker-io_api.md

File metadata and controls

546 lines (353 loc) · 12.7 KB

page_title: Docker Hub API page_description: API Documentation for the Docker Hub API page_keywords: API, Docker, index, REST, documentation, Docker Hub, registry

Docker Hub API

  • This is the REST API for Docker Hub.
  • Authorization is done with basic auth over SSL
  • Not all commands require authentication, only those noted as such.

Repositories

User Repository

Create a user repository

PUT /v1/repositories/(namespace)/(repo_name)/

Create a user repository with the given namespace and repo_name.

Example Request:

    PUT /v1/repositories/foo/bar/ HTTP/1.1
    Host: index.docker.io
    Accept: application/json
    Content-Type: application/json
    Authorization: Basic akmklmasadalkm==
    X-Docker-Token: true

    [{"id": "9e89cc6f0bc3c38722009fe6857087b486531f9a779a0c17e3ed29dae8f12c4f"}]

Parameters:

  • namespace – the namespace for the repo
  • repo_name – the name for the repo

Example Response:

    HTTP/1.1 200
    Vary: Accept
    Content-Type: application/json
    WWW-Authenticate: Token signature=123abc,repository="foo/bar",access=write
    X-Docker-Token: signature=123abc,repository="foo/bar",access=write
    X-Docker-Endpoints: registry-1.docker.io [, registry-2.docker.io]

    ""

Status Codes:

  • 200 – Created
  • 400 – Errors (invalid json, missing or invalid fields, etc)
  • 401 – Unauthorized
  • 403 – Account is not Active

Delete a user repository

DELETE /v1/repositories/(namespace)/(repo_name)/

Delete a user repository with the given namespace and repo_name.

Example Request:

    DELETE /v1/repositories/foo/bar/ HTTP/1.1
    Host: index.docker.io
    Accept: application/json
    Content-Type: application/json
    Authorization: Basic akmklmasadalkm==
    X-Docker-Token: true

    ""

Parameters:

  • namespace – the namespace for the repo
  • repo_name – the name for the repo

Example Response:

    HTTP/1.1 202
    Vary: Accept
    Content-Type: application/json
    WWW-Authenticate: Token signature=123abc,repository="foo/bar",access=delete
    X-Docker-Token: signature=123abc,repository="foo/bar",access=delete
    X-Docker-Endpoints: registry-1.docker.io [, registry-2.docker.io]

    ""

Status Codes:

  • 200 – Deleted
  • 202 – Accepted
  • 400 – Errors (invalid json, missing or invalid fields, etc)
  • 401 – Unauthorized
  • 403 – Account is not Active

Library Repository

Create a library repository

PUT /v1/repositories/(repo_name)/

Create a library repository with the given repo_name. This is a restricted feature only available to docker admins.

When namespace is missing, it is assumed to be library

Example Request:

    PUT /v1/repositories/foobar/ HTTP/1.1
    Host: index.docker.io
    Accept: application/json
    Content-Type: application/json
    Authorization: Basic akmklmasadalkm==
    X-Docker-Token: true

    [{"id": "9e89cc6f0bc3c38722009fe6857087b486531f9a779a0c17e3ed29dae8f12c4f"}]

Parameters:

  • repo_name – the library name for the repo

Example Response:

    HTTP/1.1 200
    Vary: Accept
    Content-Type: application/json
    WWW-Authenticate: Token signature=123abc,repository="library/foobar",access=write
    X-Docker-Token: signature=123abc,repository="foo/bar",access=write
    X-Docker-Endpoints: registry-1.docker.io [, registry-2.docker.io]

    ""

Status Codes:

  • 200 – Created
  • 400 – Errors (invalid json, missing or invalid fields, etc)
  • 401 – Unauthorized
  • 403 – Account is not Active

Delete a library repository

DELETE /v1/repositories/(repo_name)/

Delete a library repository with the given repo_name. This is a restricted feature only available to docker admins.

When namespace is missing, it is assumed to be library

Example Request:

    DELETE /v1/repositories/foobar/ HTTP/1.1
    Host: index.docker.io
    Accept: application/json
    Content-Type: application/json
    Authorization: Basic akmklmasadalkm==
    X-Docker-Token: true

    ""

Parameters:

  • repo_name – the library name for the repo

Example Response:

    HTTP/1.1 202
    Vary: Accept
    Content-Type: application/json
    WWW-Authenticate: Token signature=123abc,repository="library/foobar",access=delete
    X-Docker-Token: signature=123abc,repository="foo/bar",access=delete
    X-Docker-Endpoints: registry-1.docker.io [, registry-2.docker.io]

    ""

Status Codes:

  • 200 – Deleted
  • 202 – Accepted
  • 400 – Errors (invalid json, missing or invalid fields, etc)
  • 401 – Unauthorized
  • 403 – Account is not Active

Repository Images

User Repository Images

Update user repository images

PUT /v1/repositories/(namespace)/(repo_name)/images

Update the images for a user repo.

Example Request:

    PUT /v1/repositories/foo/bar/images HTTP/1.1
    Host: index.docker.io
    Accept: application/json
    Content-Type: application/json
    Authorization: Basic akmklmasadalkm==

    [{"id": "9e89cc6f0bc3c38722009fe6857087b486531f9a779a0c17e3ed29dae8f12c4f",
    "checksum": "b486531f9a779a0c17e3ed29dae8f12c4f9e89cc6f0bc3c38722009fe6857087"}]

Parameters:

  • namespace – the namespace for the repo
  • repo_name – the name for the repo

Example Response:

    HTTP/1.1 204
    Vary: Accept
    Content-Type: application/json

    ""

Status Codes:

  • 204 – Created
  • 400 – Errors (invalid json, missing or invalid fields, etc)
  • 401 – Unauthorized
  • 403 – Account is not Active or permission denied

List user repository images

GET /v1/repositories/(namespace)/(repo_name)/images

Get the images for a user repo.

Example Request:

    GET /v1/repositories/foo/bar/images HTTP/1.1
    Host: index.docker.io
    Accept: application/json

Parameters:

  • namespace – the namespace for the repo
  • repo_name – the name for the repo

Example Response:

    HTTP/1.1 200
    Vary: Accept
    Content-Type: application/json

    [{"id": "9e89cc6f0bc3c38722009fe6857087b486531f9a779a0c17e3ed29dae8f12c4f",
    "checksum": "b486531f9a779a0c17e3ed29dae8f12c4f9e89cc6f0bc3c38722009fe6857087"},
    {"id": "ertwetewtwe38722009fe6857087b486531f9a779a0c1dfddgfgsdgdsgds",
    "checksum": "34t23f23fc17e3ed29dae8f12c4f9e89cc6f0bsdfgfsdgdsgdsgerwgew"}]

Status Codes:

  • 200 – OK
  • 404 – Not found

Library Repository Images

Update library repository images

PUT /v1/repositories/(repo_name)/images

Update the images for a library repo.

Example Request:

    PUT /v1/repositories/foobar/images HTTP/1.1
    Host: index.docker.io
    Accept: application/json
    Content-Type: application/json
    Authorization: Basic akmklmasadalkm==

    [{"id": "9e89cc6f0bc3c38722009fe6857087b486531f9a779a0c17e3ed29dae8f12c4f",
    "checksum": "b486531f9a779a0c17e3ed29dae8f12c4f9e89cc6f0bc3c38722009fe6857087"}]

Parameters:

  • repo_name – the library name for the repo

Example Response:

    HTTP/1.1 204
    Vary: Accept
    Content-Type: application/json

    ""

Status Codes:

  • 204 – Created
  • 400 – Errors (invalid json, missing or invalid fields, etc)
  • 401 – Unauthorized
  • 403 – Account is not Active or permission denied

List library repository images

GET /v1/repositories/(repo_name)/images

Get the images for a library repo.

Example Request:

    GET /v1/repositories/foobar/images HTTP/1.1
    Host: index.docker.io
    Accept: application/json

Parameters:

  • repo_name – the library name for the repo

Example Response:

    HTTP/1.1 200
    Vary: Accept
    Content-Type: application/json

    [{"id": "9e89cc6f0bc3c38722009fe6857087b486531f9a779a0c17e3ed29dae8f12c4f",
    "checksum": "b486531f9a779a0c17e3ed29dae8f12c4f9e89cc6f0bc3c38722009fe6857087"},
    {"id": "ertwetewtwe38722009fe6857087b486531f9a779a0c1dfddgfgsdgdsgds",
    "checksum": "34t23f23fc17e3ed29dae8f12c4f9e89cc6f0bsdfgfsdgdsgdsgerwgew"}]

Status Codes:

  • 200 – OK
  • 404 – Not found

Repository Authorization

Library Repository

Authorize a token for a library

PUT /v1/repositories/(repo_name)/auth

Authorize a token for a library repo

Example Request:

    PUT /v1/repositories/foobar/auth HTTP/1.1
    Host: index.docker.io
    Accept: application/json
    Authorization: Token signature=123abc,repository="library/foobar",access=write

Parameters:

  • repo_name – the library name for the repo

Example Response:

    HTTP/1.1 200
    Vary: Accept
    Content-Type: application/json

    "OK"

Status Codes:

  • 200 – OK
  • 403 – Permission denied
  • 404 – Not found

User Repository

Authorize a token for a user repository

PUT /v1/repositories/(namespace)/(repo_name)/auth

Authorize a token for a user repo

Example Request:

    PUT /v1/repositories/foo/bar/auth HTTP/1.1
    Host: index.docker.io
    Accept: application/json
    Authorization: Token signature=123abc,repository="foo/bar",access=write

Parameters:

  • namespace – the namespace for the repo
  • repo_name – the name for the repo

Example Response:

    HTTP/1.1 200
    Vary: Accept
    Content-Type: application/json

    "OK"

Status Codes:

  • 200 – OK
  • 403 – Permission denied
  • 404 – Not found

Users

User Login

GET /v1/users/

If you want to check your login, you can try this endpoint

Example Request:

    GET /v1/users/ HTTP/1.1
    Host: index.docker.io
    Accept: application/json
    Authorization: Basic akmklmasadalkm==

Example Response:

    HTTP/1.1 200 OK
    Vary: Accept
    Content-Type: application/json

    OK

Status Codes:

  • 200 – no error
  • 401 – Unauthorized
  • 403 – Account is not Active

User Register

POST /v1/users/

Registering a new account.

Example request:

    POST /v1/users/ HTTP/1.1
    Host: index.docker.io
    Accept: application/json
    Content-Type: application/json

    {"email": "sam@docker.com",
     "password": "toto42",
     "username": "foobar"}

Json Parameters:

  • email – valid email address, that needs to be confirmed
  • username – min 4 character, max 30 characters, must match the regular expression [a-z0-9_].
  • password – min 5 characters

Example Response:

    HTTP/1.1 201 OK
    Vary: Accept
    Content-Type: application/json

    "User Created"

Status Codes:

  • 201 – User Created
  • 400 – Errors (invalid json, missing or invalid fields, etc)

Update User

PUT /v1/users/(username)/

Change a password or email address for given user. If you pass in an email, it will add it to your account, it will not remove the old one. Passwords will be updated.

It is up to the client to verify that that password that is sent is the one that they want. Common approach is to have them type it twice.

Example Request:

    PUT /v1/users/fakeuser/ HTTP/1.1
    Host: index.docker.io
    Accept: application/json
    Content-Type: application/json
    Authorization: Basic akmklmasadalkm==

    {"email": "sam@docker.com",
     "password": "toto42"}

Parameters:

  • username – username for the person you want to update

Example Response:

    HTTP/1.1 204
    Vary: Accept
    Content-Type: application/json

    ""

Status Codes:

  • 204 – User Updated
  • 400 – Errors (invalid json, missing or invalid fields, etc)
  • 401 – Unauthorized
  • 403 – Account is not Active
  • 404 – User not found

Search

If you need to search the index, this is the endpoint you would use.

GET /v1/search

Search the Index given a search term. It accepts

[GET](http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3)
only.

Example request:

    GET /v1/search?q=search_term HTTP/1.1
    Host: index.docker.io
    Accept: application/json

Example response:

    HTTP/1.1 200 OK
    Vary: Accept
    Content-Type: application/json

    {"query":"search_term",
      "num_results": 3,
      "results" : [
         {"name": "ubuntu", "description": "An ubuntu image..."},
         {"name": "centos", "description": "A centos image..."},
         {"name": "fedora", "description": "A fedora image..."}
       ]
     }

Query Parameters:

  • q – what you want to search for

Status Codes:

  • 200 – no error
  • 500 – server error