Docker API: Search container images
Finds public Docker Hub container images matching a software name, in Docker Hub search order, with publisher, badge, stars, last update and exact total pulls when Docker Hub publishes them. Can keep only Docker Official Images and Verified Publisher images.
Unofficial. Not affiliated with or endorsed by Docker.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Query, required
query Software or container image to search for, for example postgres.
postgres
- Max Results optional
max_results Maximum number of images to return, for example 20 (up to 100).
20 (default)
Whole number from 1 to 100.
- Official Only optional
official_only For example true to include only Docker Official Images and Verified Publisher images.
false (default)
True or false.
Input as JSON
{ "query": "postgres"}Output
{ "images": [ { "link": "https://hub.docker.com/_/postgres" , "badge": "official", "stars": 15023, "publisher": "library", "image_name": "postgres", "description": "The PostgreSQL object-relational database system provides reliability and data integrity.", "total_pulls": 11635385361, "last_updated": "2026-09-25" }, { "link": "https://hub.docker.com/r/cimg/postgres" , "badge": "verified publisher", "stars": 9, "publisher": "CircleCI", "image_name": "cimg/postgres" , "description": null, "total_pulls": 810616127, "last_updated": "2026-08-14" }, { "link": "https://hub.docker.com/r/circleci/postgres" , "badge": "verified publisher", "stars": 35, "publisher": "CircleCI", "image_name": "circleci/postgres" , "description": "The PostgreSQL object-relational database system provides reliability and data integrity.", "total_pulls": 510187680, "last_updated": "2021-12-18" } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"hub.docker.com/search_container_images","input":{"query":"postgres"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "hub.docker.com/search_container_images" , "input": { "query": "postgres" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "hub.docker.com/search_container_images" , "input": { "query": "postgres" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run hub.docker.com/search_container_images# with {"query":"postgres"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "query" ], "properties": { "query": { "type": "string", "minLength": 1, "description": "Software or container image to search for, for example postgres." }, "max_results": { "type": "integer", "default": 20, "maximum": 100, "minimum": 1, "description": "Maximum number of images to return, for example 20 (up to 100)." }, "official_only": { "type": "boolean", "default": false, "description": "For example true to include only Docker Official Images and Verified Publisher images." } }}Output schema
{ "type": "object", "required": [ "images" ], "properties": { "images": { "type": "array", "items": { "type": "object", "required": [ "image_name", "publisher", "description", "total_pulls", "stars", "badge", "last_updated", "link" ], "properties": { "link": { "type": "string", "description": "Docker Hub image page." }, "badge": { "enum": [ "official", "verified publisher", "sponsored open source", "none" ], "type": "string", "description": "Docker Hub badge." }, "stars": { "type": [ "integer", "null" ], "description": "Number of stars." }, "publisher": { "type": [ "string", "null" ], "description": "Publisher shown on Docker Hub." }, "image_name": { "type": "string", "description": "Container image name." }, "description": { "type": [ "string", "null" ], "description": "Short image description." }, "total_pulls": { "type": [ "integer", "null" ], "description": "Exact total pulls, when publicly available." }, "last_updated": { "type": [ "string", "null" ], "format": "date", "description": "Last updated date." } }, "additionalProperties": false }, "description": "Matching images in Docker Hub search order." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
hub.docker.com/search_container_images- Returns
- image name, publisher, description, total pulls, stars, badge, last updated date, link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method hub.docker.com/search_container_images with the inputs above.
Ask your agent
- Find me public container images for redis, only official or verified publisher ones, and show pull counts and stars
- Which nginx images on Docker Hub have the most pulls? Give me the top 10 with publisher and last updated date
- I need a trusted image for running Grafana — list up to 5 official or verified options with their badges
- Search Docker for elasticsearch images and return 30 results with descriptions, stars, and links
- what container images exist for mosquitto mqtt broker? include community ones, show when each was last updated
See more
All Docker methodsGets public Docker Hub image details and the newest tags from an image name or Docker Hub page link. Signature and metadata artifact tags are omitted; size is the reported compressed tag size.
hub.docker.com/get_container_imageSearches the npm registry for JavaScript packages by description or keywords, in npm's search order, and returns each package's latest version, weekly downloads and publish date.
npmjs.com/search_packagesFinds Rust crates on crates.io by keywords, sorted by relevance, total downloads, recent downloads, or newest creation.
crates.io/search_cratesFinds public GitHub repositories by keywords, with an optional language filter and sort order. Returns up to 100 matches.
github.com/search_repositoriesFinds free-to-use Wikimedia Commons images for a topic in Commons relevance order. Each image comes with its links, creator and licence details.
commons.wikimedia.org/search_free_imagesFinds Stack Overflow programming questions matching plain-language search words, optionally filtered by tag and answer status, with a chosen sort order.
stackoverflow.com/search_questionsFinds Chrome Web Store extensions by keywords in store order, with each listing's developer, users, rating, rating count, short description and store link. Some listings omit developer, users or ratings.
chromewebstore.google.com/search_extensionsFinds DoorDash restaurants delivering to a street address or ZIP code, optionally for a cuisine or dish, in DoorDash's search order. Fees and times reflect guest offers; the numeric fee is null when DoorDash shows no amount.
doordash.com/search_restaurants