Search Docker images.
Searches Docker Hub container images by name or keyword: repository name, short description, star count, pull count, whether it is an official image, and link. First page of results (up to 25). Returns an empty list when nothing matches.
- Site
- Docker Hub, United States
- Version
- v1
- Runs, last 7 days
- No reports yet
- sha256
- 9adc3cb9ef12…
Run it with your agent
after installing WieldAsk in plain words. Your agent finds this recipe and calls it:
“Search Docker images.”
Read-only: it changes nothing on the site. No login needed.
{ "tool": "run", "arguments": { "recipe_id": "hub.docker.com/search-packages", "params": { "query": "postgres" } } }
Requests
sent from your browser, in order- 1GET/v2/search/repositories/?page_size&queryDocker Hub's public repository search API, a plain read-only GET with no key. Results are in results[]; each has repo_name (with the namespace for non-official images), short_description, star_count, pull_count and is_official.
Parameters
from your agentquerystringrequiredImage name or keyword, e.g. 'postgres', 'nginx', 'python 3.12'
Returns
to your agentimagesobject[]description, name, official, pulls, stars, url
querystring
Where it can send
- hub.docker.com
Anything else is blocked by the extension.
Reads from your session
Nothing. Your browser attaches the site's cookies by itself.
Used only in requests to the addresses on the left. Never sent to wield.run or your agent.
Checks
a run passes when- length(output.images) > `0`
- length(output.images[?starts_with(url, 'https://hub.docker.com/')]) == length(output.images)
- length(output.images[?name != `null`]) == length(output.images)
- length(output.images[?official == `true`]) > `0`
Raw recipe
Served as canonical JSON from /api/v1/recipes/hub.docker.com/search-packages, so its sha256 matches the ETag and the index.
Check it yourself
curl -s https://wield.run/api/v1/recipes/hub.docker.com/search-packages | shasum -a 256 # 9adc3cb9ef12b5ce87e6cfd9508575dd8861a28c82ebf829dcfe24a010aedff0
hub.docker.com/search-packages.json, v1
{ "description": "Searches Docker Hub container images by name or keyword: repository name, short description, star count, pull count, whether it is an official image, and link. First page of results (up to 25). Returns an empty list when nothing matches.", "effect": "read", "id": "hub.docker.com/search-packages", "keywords": [ "docker", "docker hub", "dockerhub", "container", "containers", "image", "images", "registry", "hub.docker.com", "devops", "postgres", "nginx", "redis" ], "output": { "schema": { "properties": { "images": { "items": { "properties": { "description": { "type": [ "string", "null" ] }, "name": { "description": "Repository name; includes the namespace for non-official images, e.g. 'bitnami/postgresql'", "type": "string" }, "official": { "type": "boolean" }, "pulls": { "description": "Total pulls", "type": "integer" }, "stars": { "type": "integer" }, "url": { "type": "string" } }, "required": [ "name", "url" ], "type": "object" }, "type": "array" }, "query": { "type": "string" } }, "required": [ "query", "images" ], "type": "object" }, "value": "{query: params.query, images: steps.search.repos[].{name: repo_name, description: short_description || `null`, stars: star_count || `0`, pulls: pull_count || `0`, official: is_official == `true`, url: (is_official && join('', ['https://hub.docker.com/_/', repo_name])) || join('', ['https://hub.docker.com/r/', repo_name])}}" }, "params": { "additionalProperties": false, "properties": { "query": { "description": "Image name or keyword, e.g. 'postgres', 'nginx', 'python 3.12'", "maxLength": 100, "minLength": 2, "type": "string" } }, "required": [ "query" ], "type": "object" }, "provenance": { "method": "har", "notes": "The search page /search?q= renders its cards from client-side data. Docker Hub's public JSON search API /v2/search/repositories/?query= answers a plain GET with no key and returns the same repository fields (repo_name, short_description, star_count, pull_count, is_official). The recipe calls that API, not the page. Official images link to /_/<name>, others to /r/<namespace>/<name>.", "recorded_at": "2026-11-08T15:55:00.000Z", "recorded_by": "wield-forge (claude-haiku agent)" }, "requires_login": false, "schema": "https://wield.run/schema/recipe/v1.json", "site": { "country": "US", "id": "hub.docker.com", "language": "en", "name": "Docker Hub", "origin": "https://hub.docker.com", "origins": [ "https://hub.docker.com" ] }, "steps": [ { "description": "Docker Hub's public repository search API, a plain read-only GET with no key. Results are in results[]; each has repo_name (with the namespace for non-official images), short_description, star_count, pull_count and is_official.", "expect": { "content_type": "json", "status": [ 200 ] }, "extract": { "json": { "repos": "results[?repo_name]" } }, "id": "search", "request": { "headers": { "Accept": "application/json" }, "method": "GET", "query": { "page_size": "25", "query": "{{params.query}}" }, "url": "/v2/search/repositories/" } } ], "task": "Search Docker images", "tos": { "notes": "Not reviewed. One search page per call, the same page a visitor loads. The site's terms on automated access were not checked.", "reviewed": false }, "verify": { "checks": [ "length(output.images) > `0`", "length(output.images[?starts_with(url, 'https://hub.docker.com/')]) == length(output.images)", "length(output.images[?name != `null`]) == length(output.images)", "length(output.images[?official == `true`]) > `0`" ], "example_params": { "query": "postgres" }, "max_ms": 5000 }, "version": 1 }