Skip to content

Commit c30d470

Browse files
GordonBeemingclaudegitbutler-client
committed
docs: document DinD + airlock known issue (#20)
The airlock's internal: true network prevents the workload from reaching host port mappings via raw TCP, causing Testcontainers to time out on sibling container connections. Filed #101 with analysis and potential solutions. Workaround: use --dind without --airlock. Also adds gitignore entries for .playwright-mcp/ snapshots and .claude/scheduled_tasks.lock. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: GitButler <gitbutler@gitbutler.com>
1 parent ae827a4 commit c30d470

2 files changed

Lines changed: 8 additions & 1 deletion

File tree

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5550,3 +5550,9 @@ test-bin/
55505550
pbi.md
55515551

55525552
.dev-build.env
5553+
5554+
# Playwright MCP snapshots
5555+
.playwright-mcp/
5556+
5557+
# Claude scheduled tasks lock
5558+
.claude/scheduled_tasks.lock

docs/known-issues.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ This document lists known issues and limitations. Click the issue title for full
55
| Issue | OS | Shell/Terminal | Fix Planned? |
66
|-------|----|----|-------------|
77
| Brokered Docker socket: chunked-body create requests skip inspection | All | - | Yes |
8+
| Brokered Docker socket: DinD + airlock mode — Testcontainers cannot reach sibling containers | macOS, Windows | - | Investigating |
89
| Brokered Docker socket: Windows host is best-effort | Windows | - | Investigating |
910

1011
## Brokered Docker socket (beta)
@@ -26,7 +27,7 @@ The `--dind` flag enables Testcontainers and sibling-container workflows by rout
2627
- **Windows host is best-effort.** The broker uses TCP loopback on Windows and connects upstream via Docker Desktop's named pipe (`\\.\pipe\docker_engine`). This works on Docker Desktop with WSL2 in most setups; if your environment routes the daemon differently, set `DOCKER_HOST` explicitly or run from a Linux/macOS host.
2728
- **Podman:** Works via runtime detection. The broker queries `podman info --format '{{.Host.RemoteSocket.Path}}'` and falls back to the conventional rootless and rootful socket paths. If your Podman setup doesn't expose `Host.RemoteSocket.Path`, set `DOCKER_HOST=unix:///path/to/podman.sock`.
2829
- **OrbStack:** Works without configuration. OrbStack exposes the standard `/var/run/docker.sock` on macOS, so the broker connects to it the same way as Docker Desktop.
29-
- **DinD + airlock:** Works end-to-end via the proxy container's socat bridge (the airlock proxy is dual-homed and forwards `proxy:2375` to the host broker on macOS / Windows where the airlock network can't reach `host.docker.internal` directly). Spawned siblings get `NetworkMode` rewritten to the airlock compose network, so the workload reaches them by Docker DNS without ever crossing the airlock boundary.
30+
- **DinD + airlock (macOS / Windows):** The Docker API path works (workload → `proxy:2375` → socat → host broker), and sibling containers are created on the airlock compose network. However, **Testcontainers data-plane connections fail**: the workload sets `TESTCONTAINERS_HOST_OVERRIDE=host.docker.internal`, but `host.docker.internal` is unreachable via raw TCP from the `internal: true` airlock network. Testcontainers tries to connect to `<host>:<random_mapped_port>` and times out. **Workaround:** use `--dind` without `--airlock` until a fix lands. See [#101](https://github.com/GordonBeeming/copilot_here/issues/101) for potential solutions and discussion.
3031

3132
## Reporting New Issues
3233

0 commit comments

Comments
 (0)