Merge pull request #4618 from docker/docs/community-resources

docs: add community resources and keep Community on GitHub Pages
This commit is contained in:
Arnaud Héritier authored and GitHub committed 2026-10-16 15:01:10 +00:00
commit cc52bd767c
31 files changed
+369 -88

No files matched your search

+7 -1
View File
@@ -1,7 +1,7 @@
# Checks for the documentation source in docs/**. Every job runs in parallel:
#
# markdownlint style, via docs/.markdownlint-cli2.yaml
# canonical every mounted page canonicalizes to its docs.docker.com URL
# canonical page canonicals match their authoritative surface; no stale community links
# links relative Markdown links resolve to a real file (lychee,
# offline); these are what the docs.docker.com module mount
# resolves, so a broken one breaks the downstream build
@@ -62,6 +62,12 @@ jobs:
- name: Check canonical front matter
run: ./scripts/docs-check-canonical.sh
- name: Reject stale community links
run: ./scripts/docs-check-community-links.sh
- name: Test community URL policy
run: ./scripts/docs-test-community.sh
links:
timeout-minutes: 10
runs-on: ubuntu-latest
+3 -1
View File
@@ -93,8 +93,10 @@ docker agent run ./golang_developer.yaml
## Telemetry
We collect anonymous usage data to improve the tool. See [Telemetry](https://docker.github.io/docker-agent/community/telemetry).
We collect anonymous usage data to improve the tool. See [Telemetry](https://docker.github.io/docker-agent/configuration/telemetry).
## Community
[Docker Community Slack](http://dockr.ly/comm-slack) · [#docker-agent channel](https://dockercommunity.slack.com/archives/C09DASHHRU4)
Explore [community projects, videos, and articles](docs/community/resources/index.md) about Docker Agent.
+1 -1
View File
@@ -1,4 +1,4 @@
public/
resources/
/resources/
.hugo_build.lock
node_modules/
+46 -10
View File
@@ -75,9 +75,9 @@ the page is mounted on docs.docker.com.
## Canonical URLs
Every content page is mounted on docs.docker.com, and this site
tracks `main` while docs.docker.com is pinned to a release — so the
stable page is the authoritative copy. Each
Technical content is mounted on docs.docker.com. This site tracks
`main` while docs.docker.com is pinned to a release, so the stable
page is the authoritative copy. Each technical
`docs/<section>/<page>/index.md` sets `canonical:` in its front
matter (after `weight:`), derived from its path:
@@ -85,13 +85,49 @@ matter (after `weight:`), derived from its path:
canonical: https://docs.docker.com/ai/docker-agent/<section>/<page>/
```
The github.io layout renders it as the page's `rel=canonical` link;
docs.docker.com ignores the value and self-canonicalizes. CI
(`docs / canonical`, `scripts/docs-check-canonical.sh`) fails when the
value is missing or doesn't match the page path — mind it when
scaffolding a new page from an existing one. The homepage, `404.md`
and section `_index.md` files are not mirrored pages and don't set
one.
Community content is authoritative on github.io, not docs.docker.com:
```yaml
canonical: https://docker.github.io/docker-agent/community/<page>/
```
The github.io layout renders the value as the page's `rel=canonical`
link; docs.docker.com ignores it and self-canonicalizes. CI
(`docs / canonical`, `scripts/docs-check-canonical.sh`) rejects missing,
duplicate or incorrect values. The homepage, `404.md` and section
`_index.md` files don't set one.
### Legacy community URLs
Telemetry and OpenTelemetry Tracing live in `configuration/`;
Troubleshooting lives in `guides/`. Moving a page requires both an
`aliases:` entry for its old docs.docker.com path on the destination page
and an old → new path entry in `data/redirects.yml` for github.io.
`disableAliases: true` is intentional here: those aliases are consumed
only by docs.docker.com.
`layouts/_partials/redirects.html`, called from the home page, publishes
redirect files via `resources.FromString`. They are not content pages, so
they are absent from navigation, llms.txt and page lists. Each emits the
target page's canonical, `noindex`, a meta refresh and a fallback link;
JavaScript preserves query strings and fragments. Validate publication
with both `hugo` and `hugo server` when changing the redirect mechanism.
Link directly to the new Markdown files in authored content. CI runs
`scripts/docs-check-community-links.sh` to reject stale technical
`community/` URLs, docs.docker.com community URLs, and relative links
from outside Community into it. Use the absolute github.io URL when
linking from technical content to Contributing or Resources. The separate
exclusion of Community from docker/docs mounts belongs in that repository;
these source and canonical changes do not change its mounts.
## Navigation
Guides and Community are separate sidebar sections in `data/nav.yml`, not
subgroups of Resources. Guides contains the practical guides imported on
docs.docker.com; Community contains Contributing and Community Resources and
is published only on github.io. Navigation labels do not change content paths
or module mounts.
## llms.txt
+1 -1
View File
@@ -1,5 +1,5 @@
---
title: "Community"
description: "Contributing, troubleshooting, and telemetry."
description: "Contributing and community resources."
weight: 80
---
+2 -2
View File
@@ -3,7 +3,7 @@ title: "Contributing"
description: "Docker Agent is open source. Here's how to set up your development environment and contribute."
keywords: docker agent, ai agents, community, contributing
weight: 10
canonical: https://docs.docker.com/ai/docker-agent/community/contributing/
canonical: https://docker.github.io/docker-agent/community/contributing/
---
_Docker Agent is open source. Here's how to set up your development environment and contribute._
@@ -332,7 +332,7 @@ File issues on the [GitHub issue tracker](https://github.com/docker/docker-agent
> [!NOTE]
> **See also**
>
> [Troubleshooting](../troubleshooting/index.md) — Common issues and debug mode. [Telemetry](../telemetry/index.md) — What data is collected and how to opt out.
> [Troubleshooting](../../guides/troubleshooting/index.md) — Common issues and debug mode. [Telemetry](../../configuration/telemetry/index.md) — What data is collected and how to opt out.
- Use the included issue template
- Search for existing issues before creating new ones
+76
View File
@@ -0,0 +1,76 @@
---
title: "Community Resources"
description: "Discover community projects, videos, and articles about building with Docker Agent."
keywords: docker agent, cagent, community, projects, videos, articles, tutorials
weight: 15
canonical: https://docker.github.io/docker-agent/community/resources/
---
Explore projects, talks, tutorials, and articles from the Docker Agent community.
Community projects and third-party content are independently maintained. Inclusion
here does not imply endorsement or support by Docker. Docker-published videos are
identified by their publisher.
Older resources use the former name **cagent** and may describe older releases.
Check commands and configuration against the current documentation before using them.
## Projects
Projects are listed alphabetically. The language column describes the project's
documentation, not its implementation. Added dates record inclusion in this list,
not the project's creation date.
| Project | Description | Maintainer | Docs language | Added |
| --- | --- | --- | --- | --- |
| [measix-tuck](https://github.com/topabomb/measix-tuck) | A self-hosted browser workbench using the official Docker Agent runtime, with responsive conversation and task views, workspace files, and versioned deliverables. | [topabomb](https://github.com/topabomb) | Chinese | 2026-10-16 |
License note for measix-tuck: **No project license declared.**
## Videos
Videos are listed newest first by publication date. Durations are rounded to the
nearest whole minute (`N min`). Where an individual presenter is not credited, the
publisher is listed instead.
| Video | Speaker or creator | Publisher | Language | Duration | Published |
| --- | --- | --- | --- | --- | --- |
| [Docker Agent Tutorial: Build Sandboxed AI Agents in 8 Lines of YAML (Free Local Setup)](https://www.youtube.com/watch?v=NxEE-CNMsvg) | Chloe (Code With Chloe) | Code With Chloe | English | 4 min | 2026-10-14 |
| [Why I’m Switching From Python to Docker Agent for AI Agents](https://www.youtube.com/watch?v=Mph1H5u3yeA) | Better Stack | Better Stack | English | 6 min | 2026-10-10 |
| [Docker Agent Overview: Declarative Multi-Agent Workflows Without Python Plumbing](https://www.youtube.com/watch?v=3msqK-WiAmI) | Alex Hitt | Alex Hitt | English | 7 min | 2026-10-09 |
| [Create your own AI Agents without code by David Gageot](https://www.youtube.com/watch?v=EJv0TMNSUjw) | David Gageot | Devoxx | English | 45 min | 2026-10-07 |
| [Specialized AI Agents: from concept to production by David Gageot](https://www.youtube.com/watch?v=npSWywhFDHo) | David Gageot | Devoxx | English | 139 min | 2026-10-06 |
| [Docker Agents Explained](https://www.youtube.com/watch?v=B30qre1TpeU) | Mr. Cloud Book | Mr. Cloud Book | English | 6 min | 2026-09-30 |
| [Exploring Docker’s new AI stack with Model Runner and Cagent - Siri Varma Vegiraju](https://www.youtube.com/watch?v=py-tKKYhB64) | Siri Varma Vegiraju | Platform Engineering / PlatformCon | English | 18 min | 2026-06-22 |
| [Docker Agent - comment simplifier encore plus la création d'agents IA ?](https://www.youtube.com/watch?v=WI_aNYDWfQY) | Djordje Lukic and David Gageot | Devoxx France | French | 43 min | 2026-05-12 |
| [cagent: Build Declarative AI Agents with Docker — Docker's AI Guide to the Galaxy](https://www.youtube.com/watch?v=xADueHUWzNM) | Oleg Šelajev (host) and Djordje Lukic | Docker | English | 38 min | 2025-09-24 |
## Articles
Articles are listed newest first by the date shown. Dates are publication dates
unless explicitly marked **Updated** or **Series start**. Reading times are those
published by the source; **Not provided** means the source does not give a reading time.
The nine-part *A mini code agent with Docker Agent* series by k33g has one row
linking every part. Its reading time is the sum of the source-published times for
all nine parts, not Part 1 alone; its date marks the series start.
| Article | Author or publisher | Language | Reading time | Date |
| --- | --- | --- | --- | --- |
| [Building AI Agents with Docker Agent](https://www.kdnuggets.com/building-ai-agents-with-docker-agent) | Shittu Olumide | English | Not provided | Published 2026-10-08 |
| [Zed Editor + Docker Agent + ACP, but in a sandbox: running the agent with sbx](https://k33g.org/p/20261004-acp-sbx-docker-agent) | k33g | English | 6 min | Published 2026-10-04 |
| [Zed Editor + Docker Agent + ACP: coding with a local agent plugged into llmman](https://k33g.org/p/20261003-acp-zed-docker-agent) | k33g | English | 5 min | Published 2026-10-03 |
| [Docker Agent + llama.cpp: a local code agent in 5 minutes 🤖💙🦙](https://k33g.org/p/20260915-docker-agent-llamacpp) | k33g | English | 4 min | Published 2026-09-15 |
| A mini code agent with Docker Agent — Parts [1](https://k33g.org/p/20260801-docker-agent-01-shell), [2](https://k33g.org/p/20260802-docker-agent-02-fs-todo), [3](https://k33g.org/p/20260803-docker-agent-03-think-memory-permissions), [4](https://k33g.org/p/20260805-docker-agent-04-rag), [5](https://k33g.org/p/20260806-docker-agent-05-mcp), [6](https://k33g.org/p/20260807-docker-agent-06-skills), [7](https://k33g.org/p/20260808-docker-agent-07-instructions), [8](https://k33g.org/p/20260811-docker-agent-08-coding-agent), [9](https://k33g.org/p/20260813-docker-agent-09-agents-team) | k33g | English | 71 min total (9 parts) | Series start 2026-08-01 |
| [Discovering Docker Agent with AI Endpoints](https://blog.ovhcloud.com/discovering-docker-agent-with-ai-endpoints/) | Stéphane Philippart | English | 4 min | Published 2026-07-02 |
## Suggest a resource
To add a resource or correct an entry, open a pull request using the
[contributing guide](../contributing/index.md). Include the original project or
publication link, a short description, maintainer or author/speaker attribution,
and the content or documentation language. Round video durations to the nearest
whole minute (`N min`). Include source-published reading times when available and
dates (`YYYY-MM-DD`), clearly labeling publication, update, series-start, or
list-addition dates. Do not guess missing metadata; use **Not provided** when the
source does not supply it.
+1 -1
View File
@@ -250,7 +250,7 @@ $ docker agent run docker.io/myorg/private-agent:latest
> [!NOTE]
> **Troubleshooting**
>
> Having issues with push/pull? See [Troubleshooting](../../community/troubleshooting/index.md) for common registry issues.
> Having issues with push/pull? See [Troubleshooting](../../guides/troubleshooting/index.md) for common registry issues.
## Local Development
@@ -1,9 +1,11 @@
---
title: "OpenTelemetry Tracing"
description: "Export Docker Agent traces to any OTLP backend, including Langfuse and LangSmith, for debugging agentic workflows."
keywords: docker agent, ai agents, community, opentelemetry tracing
weight: 40
canonical: https://docs.docker.com/ai/docker-agent/community/opentelemetry/
keywords: docker agent, ai agents, configuration, opentelemetry tracing
weight: 130
canonical: https://docs.docker.com/ai/docker-agent/configuration/opentelemetry/
aliases:
- /ai/docker-agent/community/opentelemetry/
---
_Docker Agent can export OpenTelemetry traces of an agent run to any OTLP/HTTP backend. This is separate from [product-analytics telemetry](../telemetry/index.md) and is opt-in via the `--otel` flag._
@@ -1,9 +1,11 @@
---
title: "Telemetry"
description: "Docker Agent collects usage data to help improve the tool. Telemetry can be disabled at any time."
keywords: docker agent, ai agents, community, telemetry
weight: 30
canonical: https://docs.docker.com/ai/docker-agent/community/telemetry/
keywords: docker agent, ai agents, configuration, telemetry
weight: 120
canonical: https://docs.docker.com/ai/docker-agent/configuration/telemetry/
aliases:
- /ai/docker-agent/community/telemetry/
---
_Docker Agent collects usage data to help improve the tool. Telemetry can be disabled at any time._
+27 -26
View File
@@ -54,6 +54,10 @@
url: /configuration/routing/
- title: User Settings
url: /configuration/user-settings/
- title: Telemetry
url: /configuration/telemetry/
- title: OpenTelemetry Tracing
url: /configuration/opentelemetry/
- section: Built-in Tools
groups:
@@ -236,29 +240,26 @@
- title: Provider Definitions
url: /providers/custom/
- section: Resources
groups:
- label: Guides
items:
- title: Tips & Best Practices
url: /guides/tips/
- title: Thinking / Reasoning
url: /guides/thinking/
- title: Managing Secrets
url: /guides/secrets/
- title: Go SDK
url: /guides/go-sdk/
- title: Managing Context & Compaction
url: /guides/compaction/
- title: Running Agents Headless & in CI
url: /guides/headless/
- label: Community
items:
- title: Contributing
url: /community/contributing/
- title: Troubleshooting
url: /community/troubleshooting/
- title: Telemetry
url: /community/telemetry/
- title: OpenTelemetry Tracing
url: /community/opentelemetry/
- section: Guides
items:
- title: Tips & Best Practices
url: /guides/tips/
- title: Thinking / Reasoning
url: /guides/thinking/
- title: Managing Secrets
url: /guides/secrets/
- title: Go SDK
url: /guides/go-sdk/
- title: Managing Context & Compaction
url: /guides/compaction/
- title: Running Agents Headless & in CI
url: /guides/headless/
- title: Troubleshooting
url: /guides/troubleshooting/
- section: Community
items:
- title: Contributing
url: /community/contributing/
- title: Community Resources
url: /community/resources/
+3
View File
@@ -0,0 +1,3 @@
/community/telemetry/: /configuration/telemetry/
/community/opentelemetry/: /configuration/opentelemetry/
/community/troubleshooting/: /guides/troubleshooting/
+1 -1
View File
@@ -84,7 +84,7 @@ Session forking, editor provider configuration, document synchronization, MCP-ov
## Trace Propagation
Enable export using `docker agent serve acp agent.yaml --otel` and the [OpenTelemetry configuration](../../community/opentelemetry/index.md). ACP metadata propagation itself needs no capability negotiation or exporter.
Enable export using `docker agent serve acp agent.yaml --otel` and the [OpenTelemetry configuration](../../configuration/opentelemetry/index.md). ACP metadata propagation itself needs no capability negotiation or exporter.
Send W3C context in **request/notification `params._meta`**, not at the JSON-RPC envelope root:
+2 -2
View File
@@ -259,7 +259,7 @@ See the [CLI reference](../cli/index.md#docker-agent-serve-api) for all flags, d
> [!NOTE]
> **What `--max-request-size` does and doesn't cover**
>
> This is a finite, process-wide cap on one serialized inbound HTTP request body — it isn't a model context-window limit, and raising it doesn't increase what a provider/model accepts or how large a local attachment/prompt file can be. A larger cap also means the server buffers more memory per request from an unauthenticated or malicious client, so weigh that against your deployment's exposure. If a reverse proxy or gateway sits in front of this server, it may enforce its own, lower cap regardless of this flag. See [Troubleshooting: HTTP 413](../../community/troubleshooting/index.md#http-413-request-body-too-large) for full diagnosis.
> This is a finite, process-wide cap on one serialized inbound HTTP request body — it isn't a model context-window limit, and raising it doesn't increase what a provider/model accepts or how large a local attachment/prompt file can be. A larger cap also means the server buffers more memory per request from an unauthenticated or malicious client, so weigh that against your deployment's exposure. If a reverse proxy or gateway sits in front of this server, it may enforce its own, lower cap regardless of this flag. See [Troubleshooting: HTTP 413](../../guides/troubleshooting/index.md#http-413-request-body-too-large) for full diagnosis.
> [!TIP]
> **Live profiling (advanced)**
@@ -325,7 +325,7 @@ $ curl -X POST http://127.0.0.1:8080/api/sessions/$SID/followup \
> [!WARNING]
> **This control plane has a fixed 1 MiB request-body cap and no built-in authentication**
>
> Unlike the standalone `docker agent serve api` process above, an attached run's `--listen` control plane exposes neither `--max-request-size` nor `--auth-token`: every request is capped at a fixed, non-configurable 1 MiB body (returning HTTP 413 above it — see [Troubleshooting: HTTP 413](../../community/troubleshooting/index.md#http-413-request-body-too-large)), and there is no bearer token to require. If you need a configurable cap, built-in bearer auth, or a network-reachable listener, run a standalone `docker agent serve api` deployment instead. Otherwise, keep `--listen` on loopback, a unix socket, or behind an authenticating reverse proxy.
> Unlike the standalone `docker agent serve api` process above, an attached run's `--listen` control plane exposes neither `--max-request-size` nor `--auth-token`: every request is capped at a fixed, non-configurable 1 MiB body (returning HTTP 413 above it — see [Troubleshooting: HTTP 413](../../guides/troubleshooting/index.md#http-413-request-body-too-large)), and there is no bearer token to require. If you need a configurable cap, built-in bearer auth, or a network-reachable listener, run a standalone `docker agent serve api` deployment instead. Otherwise, keep `--listen` on loopback, a unix socket, or behind an authenticating reverse proxy.
## Session event stream and reconnection
+1 -1
View File
@@ -201,7 +201,7 @@ See the [CLI reference](../cli/index.md#docker-agent-serve-chat) for all flags,
> [!NOTE]
> **What `--max-request-size` does and doesn't cover**
>
> This is a finite, process-wide cap on one serialized inbound HTTP request body — it isn't a model context-window limit, and raising it doesn't increase what a provider/model accepts or how large a local attachment/prompt file can be. A larger cap also means the server buffers more memory per request from an unauthenticated or malicious client, so weigh that against your deployment's exposure. If a reverse proxy or gateway sits in front of this server, it may enforce its own, lower cap regardless of this flag. See [Troubleshooting: HTTP 413](../../community/troubleshooting/index.md#http-413-request-body-too-large) for full diagnosis.
> This is a finite, process-wide cap on one serialized inbound HTTP request body — it isn't a model context-window limit, and raising it doesn't increase what a provider/model accepts or how large a local attachment/prompt file can be. A larger cap also means the server buffers more memory per request from an unauthenticated or malicious client, so weigh that against your deployment's exposure. If a reverse proxy or gateway sits in front of this server, it may enforce its own, lower cap regardless of this flag. See [Troubleshooting: HTTP 413](../../guides/troubleshooting/index.md#http-413-request-body-too-large) for full diagnosis.
## Image Inputs
+3 -3
View File
@@ -304,7 +304,7 @@ $ docker agent serve api <agent-file>|<agents-dir>|<registry-ref> [flags]
| -------------------------- | ------------------ | ---------------------------------------------------------------------------------------------------------- |
| `-l, --listen <addr>` | `127.0.0.1:8080` | Address to listen on. |
| `--auth-token <token>` | (none) | Bearer token required for all API requests. When set, every request must include `Authorization: Bearer <token>`. Leave empty to disable authentication (safe when listening on loopback interfaces only). |
| `--max-request-size <bytes>` | `1048576` (1 MiB) | Maximum request body size. Requests exceeding this limit are rejected with HTTP 413 — see [Troubleshooting: HTTP 413](../../community/troubleshooting/index.md#http-413-request-body-too-large). |
| `--max-request-size <bytes>` | `1048576` (1 MiB) | Maximum request body size. Requests exceeding this limit are rejected with HTTP 413 — see [Troubleshooting: HTTP 413](../../guides/troubleshooting/index.md#http-413-request-body-too-large). |
| `--session-workingdir-root <path>` | (none) | Confine the `working_dir` of sessions created via `POST /api/sessions` to this directory and its descendants (symlinks are resolved before the check). Unrestricted by default — any clean host directory is accepted (raw values containing `..` are rejected), as local single-user daemons rely on. Recommended for multi-user or network-exposed deployments. |
| `-s, --session-db <path>` | `session.db` | Path to the SQLite session database (relative paths resolve against the working directory). |
| `--pull-interval <minutes>`| `0` | Periodically re-pull OCI/URL references and refresh the agent definition. `0` disables auto-pull. |
@@ -425,7 +425,7 @@ $ docker agent serve chat <config> [flags]
| `--api-key-env <name>` | (none) | Read the required API key from this non-empty environment variable. |
| `--insecure-no-auth` | `false` | Permit unauthenticated non-loopback binding. |
| `--safety <policy>` | `restricted` | Tool safety policy; CLI value overrides agent/runtime configuration. |
| `--max-request-size <bytes>` | `1048576` (1 MiB) | Maximum request body size. Requests exceeding this limit are rejected with HTTP 413 — see [Troubleshooting: HTTP 413](../../community/troubleshooting/index.md#http-413-request-body-too-large). |
| `--max-request-size <bytes>` | `1048576` (1 MiB) | Maximum request body size. Requests exceeding this limit are rejected with HTTP 413 — see [Troubleshooting: HTTP 413](../../guides/troubleshooting/index.md#http-413-request-body-too-large). |
| `--request-timeout <dur>` | `5m` | Per-request timeout (covers model + tool calls + streaming). |
| `--conversations-max <n>` | `0` | Cache up to N conversations server-side, keyed by `X-Conversation-Id`. `0` disables — clients must resend history. |
| `--conversation-ttl <dur>` | `30m` | Idle TTL after which a cached conversation is evicted. |
@@ -902,4 +902,4 @@ Commands that accept a config support multiple reference types:
> [!NOTE]
> **Debugging**
>
> Having issues? See [Troubleshooting](../../community/troubleshooting/index.md) for debug mode, log analysis, and common solutions.
> Having issues? See [Troubleshooting](../../guides/troubleshooting/index.md) for debug mode, log analysis, and common solutions.
+1 -1
View File
@@ -147,4 +147,4 @@ $ docker agent run myorg/agent:tag
## What's Next?
- [**Quick Start**](../quickstart/index.md) — create and run your first agent in under 5 minutes.
- [**Troubleshooting**](../../community/troubleshooting/index.md) — something not working? Debug mode, common issues, and solutions.
- [**Troubleshooting**](../../guides/troubleshooting/index.md) — something not working? Debug mode, common issues, and solutions.
+1 -1
View File
@@ -153,4 +153,4 @@ agents:
- [**Understand Agents**](../../concepts/agents/index.md) — learn how agents work and what you can configure.
- [**Multi-Agent Systems**](../../concepts/multi-agent/index.md) — build teams of collaborating agents.
- [**Configuration Reference**](../../configuration/overview/index.md) — full reference for all YAML and HCL options.
- [**Troubleshooting**](../../community/troubleshooting/index.md) — something not working? Debug tips and common fixes.
- [**Troubleshooting**](../../guides/troubleshooting/index.md) — something not working? Debug tips and common fixes.
+1 -1
View File
@@ -273,4 +273,4 @@ It exits non-zero when something would block a run, which makes it usable as a C
- [**Quick Start**](../quickstart/index.md) — run your first agent now that a model is available.
- [**Models**](../../concepts/models/index.md) — inline vs. named models, fallbacks, and `auto` selection.
- [**Managing Secrets**](../../guides/secrets/index.md) — every way to store credentials, compared.
- [**Troubleshooting**](../../community/troubleshooting/index.md#missing-credentials-or-model-errors) — decode "no model available" and credential errors.
- [**Troubleshooting**](../../guides/troubleshooting/index.md#missing-credentials-or-model-errors) — decode "no model available" and credential errors.
+3 -3
View File
@@ -42,9 +42,9 @@ Docker Agent has several unrelated mechanisms for getting a large document, file
Three independent ceilings apply, and hitting one says nothing about the others:
1. **The HTTP body limit** — applies to any request reaching one of Docker Agent's three inbound HTTP surfaces: `docker agent serve api`, `docker agent serve chat`, or an interactive run's [`--listen`](../../features/api-server/index.md#listen) control plane. `docker agent run --remote ... -` builds a native run request from stdin and sends it to whichever of `serve api` or a `--listen` control plane the remote address points at — never `serve chat`, which speaks a different protocol. `serve api` and `serve chat` each enforce their own `--max-request-size` (1 MiB default, configurable) and return `413 Request Entity Too Large` above it; a `--listen` control plane enforces the same 1 MiB default but exposes no `--max-request-size` flag (or `--auth-token`) to change it — it's fixed, and reducing the request is the only remedy. See [Troubleshooting: HTTP 413](../../community/troubleshooting/index.md#http-413-request-body-too-large) for how to diagnose and resolve it. Local (non-`--remote`) stdin and prompt files never cross this boundary; a locally resolved `@path`/`/attach`/`--attach` attachment doesn't either for a remote run's initial message, but one added to a later steer or follow-up message on that same remote run does — see the remote-runtime row above.
1. **The HTTP body limit** — applies to any request reaching one of Docker Agent's three inbound HTTP surfaces: `docker agent serve api`, `docker agent serve chat`, or an interactive run's [`--listen`](../../features/api-server/index.md#listen) control plane. `docker agent run --remote ... -` builds a native run request from stdin and sends it to whichever of `serve api` or a `--listen` control plane the remote address points at — never `serve chat`, which speaks a different protocol. `serve api` and `serve chat` each enforce their own `--max-request-size` (1 MiB default, configurable) and return `413 Request Entity Too Large` above it; a `--listen` control plane enforces the same 1 MiB default but exposes no `--max-request-size` flag (or `--auth-token`) to change it — it's fixed, and reducing the request is the only remedy. See [Troubleshooting: HTTP 413](../../guides/troubleshooting/index.md#http-413-request-body-too-large) for how to diagnose and resolve it. Local (non-`--remote`) stdin and prompt files never cross this boundary; a locally resolved `@path`/`/attach`/`--attach` attachment doesn't either for a remote run's initial message, but one added to a later steer or follow-up message on that same remote run does — see the remote-runtime row above.
2. **Local read-time limits, which differ by path** — the TUI and non-TUI (CLI/`--exec`) message assembly don't share one text/binary rule. The TUI (both `/attach` and a typed `@path` reference) runs every file reference through one flat size ceiling *before* it looks at the file's type; non-TUI assembly — the CLI's `--attach` flag and `--exec`'s own `/attach` parsing — inlines text up to its own ceiling and hands supported binary files (images, PDFs) to a separate path with a higher cap, so a binary file that's fine for `--attach`/`--exec` can still be too big for the TUI's flatter, lower ceiling. Either way an oversized file is rejected rather than silently truncated or allowed to exhaust memory, but whether you're actually told about it depends on the surface: only the interactive TUI's `/attach` command shows a visible error notification (with a file-picker fallback), while a bare `@path` reference is only checked speculatively as you type — a rejection there is logged at debug level only, and the reference is left as plain text in your message with no on-screen notice. Outside the interactive TUI, neither the CLI's `--attach` flag nor `--exec`'s `/attach` (which reuses the same non-TUI assembly and rejection path as `--attach`, not the TUI's notification flow) prints anything about a rejected attachment in normal run output — the message just falls back to text-only, and the reason is visible only in the debug log when `--debug` is enabled. Prompt files (`add_prompt_files`/`--prompt-file`) have no equivalent guard — they're read in full on every turn regardless of size, so memory and the model's context window are what actually bound them.
3. **Model/provider context and media limits** — even content that clears the first two layers still has to fit the model's token/context window, and binary attachments (images, PDF, audio, video) only work if the model declares support for that media type (see [Attachment Capability Overrides](../../configuration/models/index.md#attachment-capability-overrides)). Exceeding the context window is a separate failure from either limit above — see [Context Window Exceeded](../../community/troubleshooting/index.md#context-window-exceeded).
3. **Model/provider context and media limits** — even content that clears the first two layers still has to fit the model's token/context window, and binary attachments (images, PDF, audio, video) only work if the model declares support for that media type (see [Attachment Capability Overrides](../../configuration/models/index.md#attachment-capability-overrides)). Exceeding the context window is a separate failure from either limit above — see [Context Window Exceeded](../../guides/troubleshooting/index.md#context-window-exceeded).
> [!NOTE]
> **No file-upload endpoint**
@@ -164,7 +164,7 @@ Docker Agent's anonymous usage telemetry is enabled by default. In CI you may wa
$ TELEMETRY_ENABLED=false docker agent run --exec agent.yaml "..."
```
See [Telemetry](../../community/telemetry/index.md) for exactly what is (and isn't) collected.
See [Telemetry](../../configuration/telemetry/index.md) for exactly what is (and isn't) collected.
## Example: GitHub Actions
@@ -1,9 +1,11 @@
---
title: "Troubleshooting"
description: "Common issues and how to resolve them when working with Docker Agent."
keywords: docker agent, ai agents, community, troubleshooting
weight: 20
canonical: https://docs.docker.com/ai/docker-agent/community/troubleshooting/
keywords: docker agent, ai agents, guides, troubleshooting
weight: 60
canonical: https://docs.docker.com/ai/docker-agent/guides/troubleshooting/
aliases:
- /ai/docker-agent/community/troubleshooting/
---
_Common issues and how to resolve them when working with Docker Agent._
+1
View File
@@ -70,6 +70,7 @@ module:
target: content/features
- source: guides
target: content/guides
# github.io-only section; docker/docs mount removal is managed separately.
- source: community
target: content/community
# github.io-only pages.
+23
View File
@@ -0,0 +1,23 @@
{{ range $old, $new := hugo.Data.redirects }}
{{ with site.GetPage $new }}
{{ $html := printf `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="robots" content="noindex">
<link rel="canonical" href="%s">
<meta http-equiv="refresh" content="0; url=%s">
<title>Page moved</title>
</head>
<body>
<p>This page has moved to <a href="%s">%s</a>.</p>
<script>window.location.replace(%s + window.location.search + window.location.hash);</script>
</body>
</html>
` (htmlEscape .Params.canonical) (htmlEscape .RelPermalink) (htmlEscape .RelPermalink) (htmlEscape .Title) (.RelPermalink | jsonify) }}
{{ $resource := resources.FromString (printf "%sindex.html" (strings.TrimPrefix "/" $old)) $html }}
{{ $resource.Publish }}
{{ else }}
{{ errorf "redirect %s points to missing page %s" $old $new }}
{{ end }}
{{ end }}
+1
View File
@@ -1,4 +1,5 @@
{{ define "main" }}
{{ if .IsHome }}{{ partial "redirects.html" . }}{{ end }}
{{/* Pages carry no body H1: like docs.docker.com, the layout renders
the front matter title. The homepage has its own hero. */}}
{{ if not .IsHome }}<h1>{{ .Title }}</h1>{{ end }}
+1 -2
View File
@@ -14,8 +14,7 @@
{{ if not .IsHome }}{{ with .File }}{{ $editPath = .Path }}{{ end }}{{ end }}
<meta name="docs-edit-url" content="https://github.com/docker/docker-agent/edit/main/docs/{{ $editPath }}">
{{/* Pages mirrored on docs.docker.com set `canonical:` in their front
matter so search engines treat the stable docs as authoritative. */}}
{{/* Each page declares its authoritative surface in front matter. */}}
{{ with .Params.canonical }}<link rel="canonical" href="{{ . }}">{{ end }}
<meta property="og:title" content="{{ if .IsHome }}Docker Agent — Run AI agents from YAML, like containers{{ else }}{{ .Title }} – Docker Agent Docs{{ end }}">
+2 -2
View File
@@ -11,7 +11,7 @@ _Read, write, and edit individual files without exposing directory or search ope
## Overview
The file toolset is a focused subset of the [filesystem toolset](../filesystem/). It reuses the filesystem implementations and exposes only these tools:
The file toolset is a focused subset of the [filesystem toolset](../filesystem/index.md). It reuses the filesystem implementations and exposes only these tools:
| Tool | Description |
| --- | --- |
@@ -36,7 +36,7 @@ The file toolset supports the filesystem toolset's path and editing options:
| `allow_list` | array | `[]` | Directories the tools may access. Empty means unrestricted. |
| `deny_list` | array | `[]` | Directories the tools must not access. Takes precedence over `allow_list`. |
Paths resolve relative to the agent's working directory. Home-directory expansion, absolute paths, access controls, symlink protection, post-edit hooks, and `.agentsignore` handling behave exactly as documented for the [filesystem toolset](../filesystem/).
Paths resolve relative to the agent's working directory. Home-directory expansion, absolute paths, access controls, symlink protection, post-edit hooks, and `.agentsignore` handling behave exactly as documented for the [filesystem toolset](../filesystem/index.md).
```yaml
toolsets:
+1 -1
View File
@@ -29,7 +29,7 @@ Each description also points the model at `get_environment_info` for edge cases
### ACP client execution
In ACP mode, clients advertising terminal support execute the configured `shell` tool through client terminals rather than a host subprocess. The adapter uses `/bin/sh` or the absolute Windows system `cmd.exe`, requires matching client/agent platform and paths, forwards only configured environment overrides, retains a bounded output tail, and does not support `sudo_askpass`. Without terminal capability, native behavior is unchanged; client failures never trigger native fallback. See [ACP client terminals](../../features/acp/#client-terminals) for cleanup, cancellation, and unknown-create limitations.
In ACP mode, clients advertising terminal support execute the configured `shell` tool through client terminals rather than a host subprocess. The adapter uses `/bin/sh` or the absolute Windows system `cmd.exe`, requires matching client/agent platform and paths, forwards only configured environment overrides, retains a bounded output tail, and does not support `sudo_askpass`. Without terminal capability, native behavior is unchanged; client failures never trigger native fallback. See [ACP client terminals](../../features/acp/index.md#client-terminals) for cleanup, cancellation, and unknown-create limitations.
### Dialect-error correction
+11 -12
View File
@@ -1,13 +1,6 @@
#!/usr/bin/env bash
# scripts/docs-check-canonical.sh — every content page mounted on
# docs.docker.com must declare the canonical: front matter value
# derived from its path, so the github.io page defers to the stable
# docs (issue #3371, phase 3.2). Missing or stale values (e.g. a page
# scaffolded by copying another one) fail here and in the docs CI workflow.
#
# Scope: docs/<section>/<page>/index.md and deeper. The homepage,
# 404.md and section _index.md files are not github.io content pages
# and are intentionally not checked (see docs/STYLE.md).
# Validate authoritative URLs for mounted technical pages and github.io Community.
# Scope: docs/<section>/<page>/index.md and deeper (see docs/STYLE.md).
set -euo pipefail
@@ -18,8 +11,13 @@ checked=0
while IFS= read -r file; do
rel=${file#docs/}
rel=${rel%/index.md}
want="canonical: https://docs.docker.com/ai/docker-agent/${rel}/"
if ! awk '/^---$/ { fm++; next } fm == 1' "$file" | grep -Fxq "$want"; then
case "$rel" in
community/*) origin="https://docker.github.io/docker-agent" ;;
*) origin="https://docs.docker.com/ai/docker-agent" ;;
esac
want="canonical: ${origin}/${rel}/"
actual=$(awk '/^---$/ { fm++; next } fm == 1 && /^canonical:/ { print }' "$file")
if [ "$actual" != "$want" ]; then
echo "${file}: missing or stale canonical, expected exactly: ${want}"
status=1
fi
@@ -32,6 +30,7 @@ if [ "$checked" -eq 0 ]; then
fi
if [ "$status" -eq 0 ]; then
echo "canonical front matter OK on ${checked} mounted content pages"
echo "canonical front matter OK on ${checked} content pages"
fi
./scripts/docs-check-community-links.sh || status=1
exit "$status"
+38
View File
@@ -0,0 +1,38 @@
#!/usr/bin/env bash
# Community is not mounted on docs.docker.com; technical links must be portable.
set -euo pipefail
cd "$(dirname "$0")/.."
status=0
while IFS= read -r file; do
case "$file" in
docs/community/*) community=1 ;;
*) community=0 ;;
esac
if ! awk -v file="$file" -v community="$community" '
FNR == 1 && /^---$/ { frontmatter = 1; next }
frontmatter && /^---$/ { frontmatter = 0; next }
frontmatter { next }
{
stale = /community\/(telemetry|opentelemetry|troubleshooting)(\/|[)#?"[:space:]]|$)/ ||
/https:\/\/docs\.docker\.com\/ai\/docker-agent\/community\//
sibling = community && /\]\((\.\.\/)+(telemetry|opentelemetry|troubleshooting)(\/|[)#?"[:space:]]|$)/
unmounted = !community && /\]\((\.\.\/)+community\//
if (stale || sibling || unmounted) {
printf "%s:%d: stale or unmounted community link: %s\n", file, FNR, $0
failed = 1
}
}
END { exit failed }
' "$file"; then
status=1
fi
done < <(find docs -type f \( -name '*.md' -o -name '*.html' -o -name '*.yml' -o -name '*.yaml' \) \
-not -path 'docs/public/*' -not -path 'docs/node_modules/*' -not -path 'docs/resources/*' \
-not -path 'docs/data/redirects.yml' | sort; printf '%s\n' README.md)
if [ "$status" -eq 0 ]; then
echo 'community links OK: no legacy URLs or technical relative links into Community'
fi
exit "$status"
+6 -6
View File
@@ -5,7 +5,7 @@
# "llms.txt"). A plain `hugo` build succeeding is not enough: a broken
# groups[].items traversal (or similar template regression) can
# silently drop entries — e.g. dropping from 99 to 64 with the
# groups-only "Built-in Tools" and "Resources" sections left empty —
# groups-only sections such as "Built-in Tools" left empty —
# while the build itself stays green. This script builds the site and
# asserts the *content* of public/llms.txt matches nav.yml exactly:
# same sections, same order, same titles, same count, every link
@@ -142,7 +142,7 @@ fi
# Sections declared via `groups:` (as opposed to a flat `items:`) —
# these are exactly the ones a broken groups[].items traversal would
# silently empty out (currently Built-in Tools, Resources).
# silently empty out (currently Built-in Tools).
groups_sections=()
while IFS= read -r line; do
groups_sections+=("$line")
@@ -151,14 +151,14 @@ done < <(awk '
/^ groups:/ { print s }
' "$NAV")
# (c) exactly 7 `## ` section headings, in nav.yml order.
# (c) exactly 8 `## ` section headings, in nav.yml order.
actual_sections=()
while IFS= read -r line; do
actual_sections+=("$line")
done < <(grep -E '^## ' "$LLMS" | sed -E 's/^## //')
if [ "${#expected_sections[@]}" -ne 7 ]; then
fail "${NAV} defines ${#expected_sections[@]} sections, want 7"
if [ "${#expected_sections[@]}" -ne 8 ]; then
fail "${NAV} defines ${#expected_sections[@]} sections, want 8"
fi
if [ "${#actual_sections[@]}" -ne "${#expected_sections[@]}" ]; then
fail "${LLMS} has ${#actual_sections[@]} '## ' section(s), want ${#expected_sections[@]} (from ${NAV})"
@@ -223,7 +223,7 @@ for i in "${!entry_lines[@]}"; do
done
# (d) items and groups[].items are both flattened: every groups-based
# section (Built-in Tools, Resources) must contribute a non-empty run
# section must contribute a non-empty run
# of entries between its heading and the next.
for section in "${groups_sections[@]}"; do
count=$(awk -v s="## ${section}" '
+90
View File
@@ -0,0 +1,90 @@
#!/usr/bin/env bash
# Exercise URL policy in an isolated fixture so failures never modify real content.
set -euo pipefail
cd "$(dirname "$0")/.."
repo=$PWD
fixture=$(mktemp -d)
trap 'rm -rf "$fixture"' EXIT
mkdir -p "$fixture/scripts" "$fixture/docs/community/resources" \
"$fixture/docs/community/contributing" "$fixture/docs/configuration/telemetry"
cp scripts/docs-check-{canonical,community-links}.sh "$fixture/scripts/"
cd "$fixture"
cat > docs/community/resources/index.md <<'EOF'
---
canonical: https://docker.github.io/docker-agent/community/resources/
---
EOF
cat > docs/configuration/telemetry/index.md <<'EOF'
---
canonical: https://docs.docker.com/ai/docker-agent/configuration/telemetry/
---
EOF
printf '# README\n' > README.md
./scripts/docs-check-canonical.sh
./scripts/docs-check-community-links.sh
expect_failure() {
if "$@" > failure.log 2>&1; then
echo "expected failure: $*" >&2
exit 1
fi
cat failure.log
}
for url in \
https://docs.docker.com/ai/docker-agent/community/resources/ \
https://docker.github.io/docker-agent/community/other/; do
printf -- '---\ncanonical: %s\n---\n' "$url" > docs/community/resources/index.md
expect_failure ./scripts/docs-check-canonical.sh
done
printf '\ncanonical: https://docker.github.io/docker-agent/community/resources/\n' > docs/community/resources/index.md
expect_failure ./scripts/docs-check-canonical.sh
cp "$repo/docs/community/resources/index.md" docs/community/resources/index.md
sed '/^canonical:/p' docs/community/resources/index.md > duplicate.md
mv duplicate.md docs/community/resources/index.md
expect_failure ./scripts/docs-check-canonical.sh
cp "$repo/docs/community/resources/index.md" docs/community/resources/index.md
for url in \
https://docker.github.io/docker-agent/configuration/telemetry/ \
https://docs.docker.com/ai/docker-agent/community/telemetry/; do
printf -- '---\ncanonical: %s\n---\n' "$url" > docs/configuration/telemetry/index.md
expect_failure ./scripts/docs-check-canonical.sh
done
cp "$repo/docs/configuration/telemetry/index.md" docs/configuration/telemetry/index.md
./scripts/docs-check-canonical.sh
for url in \
../../community/telemetry/index.md \
/community/opentelemetry/ \
'https://docker.github.io/docker-agent/community/troubleshooting/#debug-mode' \
https://docs.docker.com/ai/docker-agent/community/contributing/ \
https://docs.docker.com/ai/docker-agent/community/resources/; do
printf '[Stale](%s)\n' "$url" > docs/link.md
expect_failure ./scripts/docs-check-community-links.sh
done
printf '[Current](configuration/telemetry/index.md)\n' > docs/link.md
for url in ../../community/contributing/index.md ../../community/resources/index.md; do
printf '[Unmounted](%s)\n' "$url" > docs/link.md
expect_failure ./scripts/docs-check-community-links.sh
expect_failure ./scripts/docs-check-canonical.sh
done
printf '[Current](https://docker.github.io/docker-agent/community/resources/)\n' > docs/link.md
for url in ../telemetry/index.md ../opentelemetry/index.md '../troubleshooting/index.md#http-413-request-body-too-large'; do
printf '[Legacy](%s)\n' "$url" > docs/community/contributing/links.md
expect_failure ./scripts/docs-check-community-links.sh
done
printf '[Current](../resources/index.md)\n' > docs/community/contributing/links.md
./scripts/docs-check-community-links.sh
printf '[Stale](https://docker.github.io/docker-agent/community/telemetry)\n' > README.md
expect_failure ./scripts/docs-check-community-links.sh
printf '[Current](https://docker.github.io/docker-agent/configuration/telemetry/)\n' > README.md
./scripts/docs-check-community-links.sh
printf '[Stale](https://docs.docker.com/ai/docker-agent/community/resources/)\n' > README.md
expect_failure ./scripts/docs-check-community-links.sh
printf '# README\n' > README.md
printf '[Outside front matter](community/resources/)\n' > docs/link.md
./scripts/docs-check-canonical.sh
echo 'community URL policy regression tests passed'