Install the "testcontainers-guide-migrator" agent skill from https://github.com/docker/docs/tree/main/.agents/skills/testcontainers-guides-migrator into .claude/skills/testcontainers-guide-migrator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testcontainers-guide-migrator", then confirm the skill loads.
Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
skills CLI
$ npx skills add docker/docs --skill testcontainers-guide-migrator -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "testcontainers-guide-migrator" agent skill from https://github.com/docker/docs/tree/main/.agents/skills/testcontainers-guides-migrator into .agents/skills/testcontainers-guide-migrator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testcontainers-guide-migrator", then confirm the skill loads.
Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add docker/docs --skill testcontainers-guide-migrator -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "testcontainers-guide-migrator" agent skill from https://github.com/docker/docs/tree/main/.agents/skills/testcontainers-guides-migrator into .cursor/skills/testcontainers-guide-migrator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testcontainers-guide-migrator", then confirm the skill loads.
Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add docker/docs --skill testcontainers-guide-migrator -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "testcontainers-guide-migrator" agent skill from https://github.com/docker/docs/tree/main/.agents/skills/testcontainers-guides-migrator into .gemini/skills/testcontainers-guide-migrator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testcontainers-guide-migrator", then confirm the skill loads.
Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
skills CLI
$ npx skills add docker/docs --skill testcontainers-guide-migrator -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "testcontainers-guide-migrator" agent skill from https://github.com/docker/docs/tree/main/.agents/skills/testcontainers-guides-migrator into .github/skills/testcontainers-guide-migrator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testcontainers-guide-migrator", then confirm the skill loads.
GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add docker/docs --skill testcontainers-guide-migrator -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "testcontainers-guide-migrator" agent skill from https://github.com/docker/docs/tree/main/.agents/skills/testcontainers-guides-migrator into .opencode/skills/testcontainers-guide-migrator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testcontainers-guide-migrator", then confirm the skill loads.
OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Facts
Skill name
testcontainers-guide-migrator
GitHub stars
4.7k
Token cost
~5k tokens
SKILL.md length
1,844 words
Files
1
Skills in repo
13
Repo updated
First seen
Licence
Apache-2.0
At a glance
Migrate a Testcontainers guide from testcontainers.com into the Docker docs site (docs.docker.com).
Works in 10 steps: Pre-flight → Clone the guide repo → Convert AsciiDoc to Markdown → …
Asked to migrate a testcontainers guide
SKILL.md covers Inputs, Guide inventory, Step 0: Pre-flight and Step 1: Clone the guide repo, plus 10 more sections
Calls docker, sh and npx; reaches github.com and testcontainers.com
What it does
Testcontainers Guide Migrator is an agent skill from docker/docs, published by the product's own GitHub organization. Migrate a Testcontainers guide from testcontainers.com into the Docker docs site (docs.docker.com). Converts AsciiDoc to Hugo Markdown, updates code to the latest Testcontainers API, splits into chapters with stepper navigation, verifies code compiles and tests pass, and validates against Docker docs style rules. Use when asked to migrate a testcontainers guide, add a TC guide, or port content from testcontainers.com to Docker docs.
Its SKILL.md is about 5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering Integration testing, Static sites and blogs and Containers. It works with Docker, Java, Spring Boot and ASP.NET Core. The repository describes itself as: Source repo for Docker's Documentation. The licence is Apache-2.0.
When your agent uses it
Asked to migrate a testcontainers guide
Port content from testcontainers.com to Docker docs
Example prompts
“/testcontainers-guide-migrator”
Requirements
Python 3
Node.js
Docker
Workflow steps
10 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 7ba25ee. It shows what the files ask for, not the result of running them.
Tool permissions
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Runs code
Shell commands in SKILL.md call:
docker
sh
npx
git
mvn
go
python
dotnet
npm
curl
From the folder's file list and the shell code blocks in SKILL.md.
Network
Hosts in commands or code, which the agent is likely to contact:
github.com
testcontainers.com
Also links to:
java.testcontainers.org
From URLs in SKILL.md, links to its own repository left out.
Credentials
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Context cost
Testcontainers Guide Migrator loads about 5k tokens when it runs. Until then it costs about 117 tokens; SKILL.md has 1,844 words of instructions outside code blocks.
Always· name and description, kept in context so the agent knows when to use it
~117
When it runs· the whole SKILL.md, loaded when a task matches
~5k
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
Safety
Auto-check passed
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
Download SKILL.mdSave it as .claude/skills/testcontainers-guide-migrator/SKILL.md (or your agent's skills folder).
name
testcontainers-guide-migrator
description
Migrate a Testcontainers guide from testcontainers.com into the Docker docs site (docs.docker.com). Converts AsciiDoc to Hugo Markdown, updates code to the latest Testcontainers API, splits into chapters with stepper navigation, verifies code compiles and tests pass, and validates against Docker docs style rules. Use when asked to migrate a testcontainers guide, add a TC guide, or port content from testcontainers.com to Docker docs.
Where <tmpdir> is a temporary directory on your system (e.g. the output of mktemp -d).
The repo structure is:
<tmpdir>/{REPO_NAME}/guide/{SLUG}/index.adoc — the AsciiDoc guide source
<tmpdir>/{REPO_NAME}/src/ — application source code (referenced by include:: directives)
<tmpdir>/{REPO_NAME}/testdata/ — test data files (SQL scripts, configs, etc.)
<tmpdir>/{REPO_NAME}/pom.xml or go.mod — build config
Read guide/{SLUG}/index.adoc to get the guide content.
Find all include::{codebase}/path/to/file[] directives. The {codebase} attribute points to a remote URL, but since you have the repo cloned, read the files directly from disk instead (e.g. include::{codebase}/src/main/java/Foo.java[] → read <tmpdir>/{REPO_NAME}/src/main/java/Foo.java).
If includes have [lines="X..Y"], extract only those lines from the local file.
Note the [source,lang] block preceding each include — that determines the code fence language.
This cloned repo also serves as the base for Step 6 (code verification) — you can run the tests directly in it to confirm they pass before updating the code to the latest API.
Step 2: Convert AsciiDoc to Markdown
AsciiDoc
Markdown
== Heading
## Heading
=== Heading
### Heading
*bold* (AsciiDoc bold)
**bold**
https://url[Link text]
[Link text](url)
[source,lang]\n----\ncode\n----
```lang\ncode\n```
[source,shell] with $ prompts
```console
[NOTE]\ntext or ====\n[NOTE]\n...\n====
> [!NOTE]\n> text
[TIP]\ntext
> [!TIP]\n> text
:toc:, :toclevels:, :codebase:
Remove entirely
include::{codebase}/path[]
Replace with fetched code in a code fence
YAML front matter (date, draft, repo)
Remove; transform to Docker docs format
Step 3: Apply Docker docs style rules
These are mandatory (from STYLE.md and AGENTS.md):
No "we": "We are going to create" → "Create" or "Start by creating"
No "let us" / "let's": → imperative voice or "You can..."
No hedge words: remove "simply", "easily", "just", "seamlessly"
No meta-commentary: remove "it's worth noting", "it's important to understand"
No "allows you to" / "enables you to": → "lets you" or rephrase
No "click": → "select"
No bold for emphasis or product names: only bold UI elements
No time-relative language: remove "currently", "new", "recently", "now"
No exclamations: remove "Voila!!!" etc.
Use console language hint for interactive shell blocks with $ prompts
Use contractions: "it's", "you're", "don't"
Step 4: Update code to latest Testcontainers API
Research the latest API version for the target language before writing code.
Best practices reference: The Testcontainers team maintains Claude skills with up-to-date API patterns and best practices for each language at https://github.com/testcontainers/claude-skills/ — check the relevant language skill (testcontainers-go, testcontainers-node, testcontainers-dotnet) for current API signatures, cleanup patterns, wait strategies, and anti-patterns to avoid.
For each language, check the cloned repo's existing code, then update to the latest API. Key patterns per language:
Each guide is its own top-level entry under /guides/. Do NOT nest guides inside a shared parent section — otherwise they won't appear individually in the tag/language filters on the guides listing page.
_index.md (landing page)
yaml
---
title: {Full guide title}
linkTitle: {Short title for guides listing}
description: {One-line description}
keywords: testcontainers, {lang}, testing, {technologies used}
summary: |
{2-3 line summary for the guides listing card}
toc_min: 1
toc_max: 2
tags: [testing-with-docker]
languages: [{lang}]
params:
time: {estimated} minutes
---
<!-- Source: https://github.com/testcontainers/{REPO_NAME} -->
Content: what you'll learn (bulleted list), prerequisites, and a NOTE linking to https://testcontainers.com/getting-started/ for newcomers.
Sub-pages (chapters)
Split the guide into logical chapters. Each sub-page:
yaml
---
title: {Chapter title}
linkTitle: {Short title for stepper}
description: {One-line description}
weight: {10, 20, 30, ...}
---
No tags, languages, or params on sub-pages — only on _index.md.
Typical chapter breakdown:
Weight
File
Content
10
create-project.md
Project setup, dependencies, business logic
20
write-tests.md
First test using testcontainers
30
test-suites.md
Reusing containers, test helpers, suites
40
run-tests.md
Running tests, summary, further reading
Adapt the split to the guide's content — some guides may need fewer or more chapters.
Step 6: Verify code compiles and tests pass
This is CRITICAL. The code in the guide MUST compile and all tests MUST pass. Do not skip this step.
6a: Use the cloned repo as the verification project
The repo you cloned in Step 1 (<tmpdir>/{REPO_NAME}) already contains a working project with all source files, build config, and tests. Use it as the starting point:
bash
cd <tmpdir>/{REPO_NAME}
First, verify the original code compiles and tests pass before you change anything. This confirms a good baseline.
Show full SKILL.md (748 more words)Show less
6b: Update the code in the cloned repo
After confirming the original works, apply the API updates (from Step 4) directly in the cloned repo's source files. This is the same code you're putting in the guide — keep them in sync.
6c: Update dependencies and compile
Run compilation inside a container for reproducibility — no need to install the language toolchain on the host. Use the appropriate language Docker image, mounting the cloned repo:
bash
docker run --rm -v "<tmpdir>/{REPO_NAME}":/app -w /app <language-image> sh -c "<compile command>"
Pick the right image for the language (e.g. golang:1.25-alpine, maven:3-eclipse-temurin-21, gradle:jdk21, mcr.microsoft.com/dotnet/sdk:9.0, node:22-alpine, python:3.13-alpine). Update dependencies to the latest Testcontainers version and compile.
If compilation fails, fix the code and update the guide markdown to match.
6d: Run tests in a container with Docker socket mounted
Run tests in the same kind of container, but mount the Docker socket so Testcontainers can create sibling containers.
macOS Docker Desktop workarounds
When running on macOS with Docker Desktop, these environment variables and flags are required:
TESTCONTAINERS_HOST_OVERRIDE=host.docker.internal — On macOS, containers can't reach sibling containers via the Docker bridge IP (172.17.0.x). This tells Testcontainers (including Ryuk) to connect via host.docker.internal instead. Do NOT disable Ryuk — it is a core Testcontainers feature and the guides must demonstrate proper usage.
docker-java.properties with api.version=1.47 — Docker Desktop's minimum API version is 1.44, but docker-java defaults to 1.24. Create this file in the project root and mount it to /root/.docker-java.properties inside Java containers.
-Dspotless.check.skip=true — The Spotless Maven plugin in the source repos is incompatible with JDK 21. Skip it since it's a code formatter, not part of the test.
-Dmicronaut.test.resources.enabled=false — Micronaut's Test Resources service starts a separate process that can't connect to Docker from inside a container. The guide tests use Testcontainers directly, not Test Resources. Only needed for Micronaut guides.
Java guide test command
bash
# Create docker-java.properties in the project root
echo "api.version=1.47" > <tmpdir>/{REPO_NAME}/docker-java.properties
docker run --rm \
-v "<tmpdir>/{REPO_NAME}":/app \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "<tmpdir>/{REPO_NAME}/docker-java.properties":/root/.docker-java.properties \
-e DOCKER_HOST=unix:///var/run/docker.sock \
-e TESTCONTAINERS_HOST_OVERRIDE=host.docker.internal \
-w /app \
maven:3.9-eclipse-temurin-21 \
mvn -B test -Dspotless.check.skip=true -Dspotless.apply.skip=true
For Quarkus guides, use maven:3.9-eclipse-temurin-17 instead (Quarkus 3.22.3 compiles for Java 17).
Go guide test command
bash
docker run --rm \
-v "<tmpdir>/{REPO_NAME}":/app \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DOCKER_HOST=unix:///var/run/docker.sock \
-e TESTCONTAINERS_HOST_OVERRIDE=host.docker.internal \
-w /app \
golang:1.25-alpine \
sh -c "apk add --no-cache gcc musl-dev && go test -v -count=1 ./..."
Run guide tests one at a time. Running multiple concurrent DinD or sibling-container tests can overwhelm Docker Desktop's containerd store and cause meta.db: input/output error corruption, requiring a Docker Desktop restart.
6e: Fix until green
If any test fails, debug and fix the code in both the temporary project AND the guide markdown. Re-run until all tests pass. Do not proceed until verified.
Step 7: Update cross-references
content/manuals/testcontainers.md: Add a bullet under the ## Guides section:markdown
Do NOT updatecontent/guides/testcontainers-cloud/_index.md — keep its external links.
Link to https://testcontainers.com/getting-started/ for the Testcontainers overview.
Use internal paths for already-migrated guides; keep testcontainers.com links for unmigrated ones.
Step 8: Validate
IMPORTANT: Run ALL validation locally before committing. Vale checks run on CI and will block the PR if they fail — fixing after push wastes CI cycles and review time.
Vale.Spelling: tech terms (library names, tools) not in the dictionary → add to _vale/config/vocabularies/Docker/accept.txt (alphabetical order)
Vale.Terms: wrong casing (e.g. "python" → "Python") → fix in the markdown. Watch for package names like testcontainers-python triggering false positives — rephrase to "Testcontainers for Python" in prose.
Docker.Avoid: hedge words like "very", "simply" → reword
Docker.We: first-person plural → rewrite to "you" or imperative
Info-level suggestions (e.g. "VS Code" → "versus") are not blocking but review them
Re-run docker buildx bake vale after fixes until no errors remain in the new files.
Verify in local dev server (HUGO_PORT=1314 docker compose watch):
Guide appears when filtering by its language
Guide appears when filtering by Testing with Docker tag
Stepper navigation works across chapters
All links resolve (no 404s)
Verify all external URLs return 200:
bash
curl -s -o /dev/null -w "%{http_code}" -L "{url}"
Step 9: Commit
One commit per guide. Message format:
feat(guides): add testcontainers {lang} {guide-id} guide
Migrated from https://github.com/testcontainers/{REPO_NAME}
Updated to testcontainers-{lang} v{version} API.
Special cases
introducing-testcontainers: Language-agnostic, conceptual. May overlap with content/manuals/testcontainers.md. Review for deduplication before migrating.
local-dev-testcontainers-desktop: About Testcontainers Desktop (now part of Docker Desktop). May need significant rewriting rather than mechanical migration.
Java guides: Many share the same language. Each still gets its own testcontainers-java-{GUIDE_ID} directory.
Testcontainers Guide Migrator next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
Testcontainers Guide Migrator compared with similar skills
Skill
Stars
Used in
Tokens
Auto-check
Licence
Repo updated
Testcontainers Guide Migrator this skilldocker/docs
A skill your agent uses when you need to implement acceptance tests from maintainer-authored or maintainer-sanitized Gherkin scenario facts for Spring Boot applications — including selecting…
Creates Java + Spring Boot projects: Web applications, full-stack apps with Vue.js or Angular or React or vanilla JS, PostgreSQL, REST APIs, and Docker.
A skill your agent uses when writing, reviewing, testing, or shipping C / .NET code — ASP.NET Core APIs (minimal APIs vs controllers), EF Core data access, async correctness, solution layout in…
Audit a documentation site for agent-friendliness: discovery, markdown delivery, crawlability, semantic structure, machine-readable surfaces, and content legibility.
Handle Hugo docs information-architecture moves: discover old vs new URLs, add front matter aliases (Phase 1), update in-repo links (Phase 2), interactive List 2 resolution and fragment validation…
Clone a dockersamples Labspace repo, extract learning objectives and module structure from labspace.yaml, and produce a Hugo guide page under content/guides/ with correct frontmatter…
Migrate a Testcontainers guide from testcontainers.com into the Docker docs site (docs.docker.com). Testcontainers Guide Migrator is an agent skill from docker/docs, published by the product's own GitHub organization.com).
When should I use Testcontainers Guide Migrator?
Testcontainers Guide Migrator fits situations like: asked to migrate a testcontainers guide; port content from testcontainers.com to Docker docs.
How do I install Testcontainers Guide Migrator in Claude Code?
Run `npx skills add docker/docs --skill testcontainers-guide-migrator -a claude-code`. Or copy the skill folder (.agents/skills/testcontainers-guides-migrator in docker/docs) into .claude/skills/testcontainers-guide-migrator in your project. Claude Code loads it when a task matches its description.
How do I install Testcontainers Guide Migrator in Codex?
Run `npx skills add docker/docs --skill testcontainers-guide-migrator -a codex`. Or copy the skill folder (.agents/skills/testcontainers-guides-migrator in docker/docs) into .agents/skills/testcontainers-guide-migrator in your project. Codex loads it when a task matches its description.
Can I use Testcontainers Guide Migrator in Cursor, Gemini CLI or GitHub Copilot?
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add docker/docs --skill testcontainers-guide-migrator -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/testcontainers-guide-migrator, .gemini/skills/testcontainers-guide-migrator, .github/skills/testcontainers-guide-migrator and .opencode/skills/testcontainers-guide-migrator in your project.
What does Testcontainers Guide Migrator need to run?
Going by SKILL.md and its folder, Testcontainers Guide Migrator needs the command-line tools its instructions call (docker, sh, npx, git, mvn and go). Our summary lists: Python 3; Node.js; Docker.
Does Testcontainers Guide Migrator access the network?
SKILL.md names 3 domains. In commands or code: github.com and testcontainers.com; the agent is likely to contact these when it follows the instructions. As links in the text: java.testcontainers.org. This is read from the text; nothing was executed.
Is Testcontainers Guide Migrator safe to install?
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
What licence does Testcontainers Guide Migrator use?
Testcontainers Guide Migrator is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
How many tokens does Testcontainers Guide Migrator use?
About 5k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
What are the alternatives to Testcontainers Guide Migrator?
Skills that share tags, products or a category with Testcontainers Guide Migrator: 323 Frameworks Spring Boot Testing Acceptance Tests (jabrena/plinth, 446 stars), Dr Jskill (jdubois/dr-jskill, 342 stars), Docker (codewithmukesh/dotnet-claude-kit, 751 stars) and Containerize Aspnetcore (github/awesome-copilot, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Who maintains Testcontainers Guide Migrator?
docker (a GitHub organization, an official publisher) maintains it in docker/docs, which has 4,667 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 7, 2026.
Source: docker/docs on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.