# Docker Hub

> Work with Docker Hub container images: browse repositories and their tags, check whether an image tag has been published, and create repositories in any namespace the connected account can push to.

App · Code Repositories · 9 actions. Web page: https://docs.lodol.com/docs/integrations/docker-hub

## Actions

### Check repository exists

Check whether a repository exists and the connection can see it, without reading it. Use it to branch a workflow before creating or pushing to a repository.

**Inputs**

- Namespace (`namespace`, text, required): The Docker ID or organization the repository belongs to (the part before the '/' in 'namespace/repository'). Your own account is listed first.
- Repository (`repository`, text, required): The repository name to check for (the part after the '/' in 'namespace/repository').

**Outputs**

- `exists` (true/false)
- `full_name` (text)
- `html_url` (text)
- `namespace` (text)
- `repository` (text)

**Example output**

```json
{
  "exists": true,
  "full_name": "library/nginx",
  "html_url": "https://hub.docker.com/_/nginx",
  "namespace": "library",
  "repository": "nginx"
}
```

### Check repository has tags

Check whether a repository has any tags at all, without listing them. A freshly created repository has none until the first image is pushed.

**Inputs**

- Namespace (`namespace`, text, required): The Docker ID or organization the repository belongs to (the part before the '/' in 'namespace/repository'). Your own account is listed first.
- Repository (`repository`, text, required): The repository to act on (the part after the '/' in 'namespace/repository').

**Outputs**

- `has_tags` (true/false)
- `html_url` (text)
- `namespace` (text)
- `repository` (text)

**Example output**

```json
{
  "has_tags": true,
  "html_url": "https://hub.docker.com/_/nginx",
  "namespace": "library",
  "repository": "nginx"
}
```

### Check tag exists

Check whether a specific tag has been published to a repository, without reading it. Use it to wait for a release tag, or to stop a workflow that would overwrite one.

**Inputs**

- Namespace (`namespace`, text, required): The Docker ID or organization the repository belongs to (the part before the '/' in 'namespace/repository'). Your own account is listed first.
- Repository (`repository`, text, required): The repository to act on (the part after the '/' in 'namespace/repository').
- Tag (`tag`, text, required): The tag name to check for, for example 'latest' or 'v1.4.0'.

**Outputs**

- `exists` (true/false)
- `html_url` (text)
- `image` (text)
- `namespace` (text)
- `repository` (text)
- `tag` (text)

**Example output**

```json
{
  "exists": true,
  "html_url": "https://hub.docker.com/_/nginx/tags?name=latest",
  "image": "library/nginx:latest",
  "namespace": "library",
  "repository": "nginx",
  "tag": "latest"
}
```

### Create repository

Create a new repository in a namespace, ready for an image to be pushed to it. Needs a token with 'Read, Write & Delete' permission: Docker Hub treats making a repository as managing the namespace, not writing to a repository, so a 'Read & Write' token is refused.

**Inputs**

- Namespace (`namespace`, text, required): The Docker ID or organization the repository belongs to (the part before the '/' in 'namespace/repository'). Your own account is listed first.
- Repository name (`repository`, text, required): The name for the new repository. Lowercase letters, digits, and separators only.
- Short description (`description`, text): The one-line description shown next to the repository, up to 100 characters.
- Full description (`full_description`, text): The long description shown on the repository's page. Markdown is supported.
- Private (`is_private`, true/false): Whether only the account and its collaborators can see the repository. Public when left off. Default: `false`.

**Outputs**

- `affiliation` (text)
- `categories` (list)
- `collaborator_count` (number)
- `content_types` (list)
- `date_registered` (text)
- `description` (text)
- `full_description` (text)
- `full_name` (text)
- `has_starred` (true/false)
- `html_url` (text)
- `is_private` (true/false)
- `last_modified` (text)
- `last_updated` (text)
- `media_types` (list)
- `name` (text)
- `namespace` (text)
- `pull_count` (number)
- `repository_type` (text)
- `star_count` (number)
- `status_description` (text)
- `storage_size` (number)

**Example output**

```json
{
  "affiliation": null,
  "categories": [],
  "collaborator_count": 0,
  "content_types": [],
  "date_registered": "2026-08-26T12:00:00.000000Z",
  "description": "API server image",
  "full_description": "Built nightly from main.",
  "full_name": "myusername/my-app",
  "has_starred": false,
  "html_url": "https://hub.docker.com/r/myusername/my-app",
  "is_private": false,
  "last_modified": null,
  "last_updated": null,
  "media_types": [],
  "name": "my-app",
  "namespace": "myusername",
  "pull_count": 0,
  "repository_type": "image",
  "star_count": 0,
  "status_description": "active",
  "storage_size": 0
}
```

### Get repository

Get one repository's details: its description, whether it is private, how many pulls and stars it has, how much storage it uses, and when it was last updated.

**Inputs**

- Namespace (`namespace`, text, required): The Docker ID or organization the repository belongs to (the part before the '/' in 'namespace/repository'). Your own account is listed first.
- Repository (`repository`, text, required): The repository to act on (the part after the '/' in 'namespace/repository').

**Outputs**

- `affiliation` (text)
- `categories` (list)
- `collaborator_count` (number)
- `content_types` (list)
- `date_registered` (text)
- `description` (text)
- `full_description` (text)
- `full_name` (text)
- `has_starred` (true/false)
- `html_url` (text)
- `is_private` (true/false)
- `last_modified` (text)
- `last_updated` (text)
- `media_types` (list)
- `name` (text)
- `namespace` (text)
- `pull_count` (number)
- `repository_type` (text)
- `star_count` (number)
- `status_description` (text)
- `storage_size` (number)

**Example output**

```json
{
  "affiliation": null,
  "categories": [
    "Web servers"
  ],
  "collaborator_count": 0,
  "content_types": [
    "image"
  ],
  "date_registered": "2014-06-05T19:14:45Z",
  "description": "Official build of Nginx.",
  "full_description": "# Quick reference\n\nOfficial build of Nginx.",
  "full_name": "library/nginx",
  "has_starred": false,
  "html_url": "https://hub.docker.com/_/nginx",
  "is_private": false,
  "last_modified": "2026-08-19T19:14:19.323791Z",
  "last_updated": "2026-08-25T10:52:46.08001Z",
  "media_types": [
    "application/vnd.oci.image.index.v1+json"
  ],
  "name": "nginx",
  "namespace": "library",
  "pull_count": 13301818814,
  "repository_type": "image",
  "star_count": 21363,
  "status_description": "active",
  "storage_size": 1093352718847
}
```

### Get tag

Get one tag's details: the digest it currently points at, its compressed size, who last pushed it, and a per-architecture breakdown of the images behind it.

**Inputs**

- Namespace (`namespace`, text, required): The Docker ID or organization the repository belongs to (the part before the '/' in 'namespace/repository'). Your own account is listed first.
- Repository (`repository`, text, required): The repository to act on (the part after the '/' in 'namespace/repository').
- Tag (`tag`, text, required): The tag to read, for example 'latest' or '1.27-alpine'.

**Outputs**

- `content_type` (text)
- `digest` (text)
- `full_size` (number)
- `html_url` (text)
- `id` (number)
- `images` (list)
- `last_updated` (text)
- `last_updater_username` (text)
- `media_type` (text)
- `name` (text)
- `platforms` (list)
- `status` (text)
- `tag_last_pulled` (text)
- `tag_last_pushed` (text)

**Example output**

```json
{
  "content_type": "image",
  "digest": "sha256:db35bfc6b2951e7f8a72db5db120288c127ffaeeb4a6d4b95a26fead017d5913",
  "full_size": 26253895,
  "html_url": "https://hub.docker.com/_/nginx/tags?name=alpine",
  "id": 2255519,
  "images": [
    {
      "architecture": "amd64",
      "digest": "sha256:1f25fedd50aec27413031afb3a4f8ee4effcc9d843f6a76e81bfa92245ac5c06",
      "last_pulled": "2026-08-26T23:00:05.71198411Z",
      "last_pushed": "2026-08-19T22:50:50.894773944Z",
      "os": "linux",
      "size": 26253895,
      "status": "active",
      "variant": null
    }
  ],
  "last_updated": "2026-08-20T04:51:46.706746Z",
  "last_updater_username": "doijanky",
  "media_type": "application/vnd.oci.image.index.v1+json",
  "name": "alpine",
  "platforms": [
    "linux/amd64",
    "linux/arm64",
    "linux/arm/v7"
  ],
  "status": "active",
  "tag_last_pulled": "2026-08-26T23:10:52.048192429Z",
  "tag_last_pushed": "2026-08-20T04:51:46.706746Z"
}
```

### List namespaces

List the namespaces the connection can act in: the connected account's own Docker ID first, then any organizations it belongs to. A namespace is the part before the '/' in an image name, so this is what to read when a workflow needs to know which account it is working as.

**Inputs**: None.

**Outputs**

- `count` (number)
- `namespaces` (list)
- `username` (text)

**Example output**

```json
{
  "count": 2,
  "namespaces": [
    "myusername",
    "my-org"
  ],
  "username": "myusername"
}
```

### List repositories

List the repositories in a namespace. Private repositories are included when the connection can see them. Optionally filter by part of a name and choose the sort order.

**Inputs**

- Namespace (`namespace`, text, required): The Docker ID or organization the repository belongs to (the part before the '/' in 'namespace/repository'). Your own account is listed first.
- Name contains (`name`, text): Only return repositories whose name contains this text. Leave blank for all of them.
- Sort by (`ordering`, text): The order to return repositories in. One of: `-last_updated` (Recently updated first), `last_updated` (Least recently updated first), `-pull_count` (Most pulled first), `pull_count` (Least pulled first), `name` (Name (A–Z)), `-name` (Name (Z–A)).
- Maximum results (`limit`, number): How many repositories to return at most. Pages are fetched behind the scenes until this many are collected. Defaults to 25. From 1 to 250. Default: `25`.

**Outputs**

- `count` (number)
- `namespace` (text)
- `repositories` (list)

**Example output**

```json
{
  "count": 1,
  "namespace": "library",
  "repositories": [
    {
      "categories": [
        "Web servers"
      ],
      "content_types": [
        "image"
      ],
      "date_registered": "2014-06-05T19:14:45Z",
      "description": "Official build of Nginx.",
      "full_name": "library/nginx",
      "html_url": "https://hub.docker.com/_/nginx",
      "is_private": false,
      "last_updated": "2026-08-25T10:52:46.08001Z",
      "name": "nginx",
      "namespace": "library",
      "pull_count": 13301818814,
      "repository_type": "image",
      "star_count": 21363,
      "status_description": "active",
      "storage_size": 1093352718847
    }
  ]
}
```

### List tags

List a repository's tags, most recently pushed first. Each tag reports its digest, compressed size, the platforms it can run on, and when it was last pushed and pulled.

**Inputs**

- Namespace (`namespace`, text, required): The Docker ID or organization the repository belongs to (the part before the '/' in 'namespace/repository'). Your own account is listed first.
- Repository (`repository`, text, required): The repository to act on (the part after the '/' in 'namespace/repository').
- Maximum results (`limit`, number): How many tags to return at most. Pages are fetched behind the scenes until this many are collected. Defaults to 25. From 1 to 250. Default: `25`.

**Outputs**

- `count` (number)
- `namespace` (text)
- `repository` (text)
- `tags` (list)

**Example output**

```json
{
  "count": 1,
  "namespace": "library",
  "repository": "nginx",
  "tags": [
    {
      "content_type": "image",
      "digest": "sha256:db35bfc6b2951e7f8a72db5db120288c127ffaeeb4a6d4b95a26fead017d5913",
      "full_size": 26253895,
      "html_url": "https://hub.docker.com/_/nginx/tags?name=alpine",
      "id": 2255519,
      "images": [
        {
          "architecture": "amd64",
          "digest": "sha256:1f25fedd50aec27413031afb3a4f8ee4effcc9d843f6a76e81bfa92245ac5c06",
          "last_pulled": "2026-08-26T23:00:05.71198411Z",
          "last_pushed": "2026-08-19T22:50:50.894773944Z",
          "os": "linux",
          "size": 26253895,
          "status": "active",
          "variant": null
        }
      ],
      "last_updated": "2026-08-20T04:51:46.706746Z",
      "last_updater_username": "doijanky",
      "media_type": "application/vnd.oci.image.index.v1+json",
      "name": "alpine",
      "platforms": [
        "linux/amd64",
        "linux/arm64",
        "linux/arm/v7"
      ],
      "status": "active",
      "tag_last_pulled": "2026-08-26T23:10:52.048192429Z",
      "tag_last_pushed": "2026-08-20T04:51:46.706746Z"
    }
  ]
}
```
