Agent Distribution
Package, share, and run agents via OCI-compatible registries — just like container images.
Overview
Docker Agent agents can be pushed to any OCI-compatible registry (Docker Hub, GitHub Container Registry, etc.) and pulled/run anywhere. This makes sharing agents as easy as sharing Docker images.
TipFor CLI commands related to distribution, see CLI Reference (
docker agent share push,docker agent share pull,docker agent alias).
Pushing Agents
# Push to Docker Hub
$ docker agent share push ./agent.yaml docker.io/username/my-agent:latest
# Push to GitHub Container Registry
$ docker agent share push ./agent.yaml ghcr.io/username/my-agent:v1.0Pulling Agents
# Pull an agent
$ docker agent share pull docker.io/username/my-agent:latest
# Pull from Docker Hub shorthand
$ docker agent share pull myorg/agent:tagRunning from a Registry
Run agents directly from a registry without pulling first:
# Run directly from Docker Hub
$ docker agent run docker.io/username/my-agent:latest
# Docker Hub shorthand (docker.io is implied)
$ docker agent run myorg/agent:tag
# Run with a specific agent from a multi-agent config
$ docker agent run docker.io/username/dev-team:latest -a developerUsing as Sub-Agents
Registry agents can be used directly as sub-agents in a multi-agent configuration — no need to define them locally:
agents:
root:
model: openai/gpt-5
description: Coordinator
instruction: Delegate tasks to the right sub-agent.
sub_agents:
- myorg/agent:tag # auto-named "agent"
- my_reviewer:myorg/reviewer # explicitly named "my_reviewer"External sub-agents are automatically named after their last path segment. Use the name:reference syntax to give them a custom name.
Tag references are checked against the registry on every docker agent run, which adds a network round-trip per sub-agent at startup. Pin them to a digest (myorg/agent@sha256:…) to serve them from cache instead.
See Pin external sub-agents to a digest and External Sub-Agents for details.
Using with Aliases
Combine OCI references with aliases for convenient access:
# Create an alias for a registry agent
$ docker agent alias add coder myorg/coder --yolo
# Now just run
$ docker agent run coderUsing with API Server
The API server supports OCI references with auto-refresh:
# Start API from registry, auto-pull every 10 minutes
$ docker agent serve api docker.io/username/agent:latest --pull-interval 10Private Repositories
Docker Agent supports pulling from private GitHub repositories and registries that require authentication. Use standard Docker login or GitHub authentication:
# Login to a registry
$ docker login docker.io
# Now push/pull works with private repos
$ docker agent share push ./agent.yaml docker.io/myorg/private-agent:latest
$ docker agent run docker.io/myorg/private-agent:latestNoteDocker Desktop credentials
When pulling or running an agent from a
docker.comor*.docker.comHTTPS URL (e.g.desktop.docker.com), Docker Agent automatically forwards your Docker Desktop JWT for authentication — no explicit login required when Docker Desktop is running and signed in.Note:
docker.io(the standard Docker Hub registry domain) is a separate domain and is not covered by automatic JWT forwarding. Agents pulled fromdocker.ioorregistry-1.docker.iostill requiredocker login docker.iofor private repositories.
NoteTroubleshooting
Having issues with push/pull? See Troubleshooting for common registry issues.
Local Development
For local development and testing, you can run an agent directly from a local HTTP server without a registry:
# Serve an agent config locally
$ python3 -m http.server 8080
# Run it directly via HTTP
$ docker agent run http://localhost:8080/agent.yaml
$ docker agent run http://127.0.0.1:8080/agent.yamlThis is useful for iterating on agent configs served from a local dev server before pushing to a registry. Both localhost and 127.0.0.1 addresses are supported with plain http:// URLs.