Skip to content

Commit 8f4073a

Browse files
CopilotMossaka
andcommitted
docs: add breaking changes section for v0.9.1 Docker-in-Docker removal
Co-authored-by: Mossaka <5447827+Mossaka@users.noreply.github.com>
1 parent 1abca52 commit 8f4073a

2 files changed

Lines changed: 111 additions & 24 deletions

File tree

AGENTS.md

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -436,24 +436,30 @@ To use a local, writable GitHub MCP server with Copilot CLI, you must:
436436

437437
The agent container mounts the HOME directory, so this config file is automatically accessible to GitHub Copilot CLI running inside the container.
438438

439-
**Format:**
439+
**Format (stdio-based with npx):**
440440
```json
441441
{
442442
"mcpServers": {
443443
"github": {
444-
"type": "local",
445-
"command": "docker",
446-
"args": [
447-
"run",
448-
"-i",
449-
"--rm",
450-
"-e",
451-
"GITHUB_PERSONAL_ACCESS_TOKEN",
452-
"-e",
453-
"GITHUB_TOOLSETS=default",
454-
"ghcr.io/github/github-mcp-server:v0.19.0"
455-
],
456-
"tools": ["*"],
444+
"type": "stdio",
445+
"command": "npx",
446+
"args": ["-y", "github-mcp-custom@1.0.20", "stdio"],
447+
"env": {
448+
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PERSONAL_ACCESS_TOKEN}"
449+
}
450+
}
451+
}
452+
}
453+
```
454+
455+
**Alternative (using Go binary):**
456+
```json
457+
{
458+
"mcpServers": {
459+
"github": {
460+
"type": "stdio",
461+
"command": "/usr/local/bin/github-mcp-server",
462+
"args": ["stdio"],
457463
"env": {
458464
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PERSONAL_ACCESS_TOKEN}"
459465
}
@@ -463,13 +469,13 @@ The agent container mounts the HOME directory, so this config file is automatica
463469
```
464470

465471
**Key Requirements:**
466-
-**`"tools": ["*"]`** - Required field. Use `["*"]` to enable all tools, or list specific tool names
467-
- ⚠️ Empty array `[]` means NO tools will be available
468-
-**`"type": "local"`** - Required to specify local MCP server type
472+
-**`"type": "stdio"`** - Uses stdio transport (not Docker)
469473
-**`"env"` section** - Environment variables must be declared here with `${VAR}` syntax for interpolation
470-
-**Environment variable in args** - Use bare variable names in `-e` flags (e.g., `"GITHUB_PERSONAL_ACCESS_TOKEN"` without `$`)
471474
-**Shell environment** - Variables must be exported in the shell before running awf
472475
-**MCP server name** - Use `"github"` as the server name (must match `--allow-tool` flag)
476+
-**npx availability** - The agent container includes Node.js 22 with npx pre-installed
477+
478+
**Note:** As of v0.9.1, Docker-in-Docker support was removed ([PR #205](https://github.com/githubnext/gh-aw-firewall/pull/205)). Use stdio-based MCP servers instead of Docker-based ones.
473479

474480
### Running Copilot CLI with Local MCP Through Firewall
475481

@@ -498,17 +504,17 @@ sudo -E awf \
498504
1. `awf` needs sudo for iptables manipulation
499505
2. `-E` preserves GITHUB_TOKEN and GITHUB_PERSONAL_ACCESS_TOKEN
500506
3. These variables are passed into the agent container via the HOME directory mount
501-
4. The GitHub MCP server Docker container inherits them from the agent container's environment
507+
4. The stdio-based MCP server (running via npx) inherits them from the agent container's environment
502508

503509
### Troubleshooting
504510

505511
**Problem:** MCP server starts but says "GITHUB_PERSONAL_ACCESS_TOKEN not set"
506-
- **Cause:** Environment variable not passed correctly through sudo or to Docker container
512+
- **Cause:** Environment variable not passed correctly through sudo
507513
- **Solution:** Use `sudo -E` when running awf, and ensure the variable is exported before running the command
508514

509515
**Problem:** MCP config validation error: "Invalid input"
510-
- **Cause:** Missing `"tools"` field
511-
- **Solution:** Add `"tools": ["*"]` to the MCP server config
516+
- **Cause:** Invalid configuration format or missing required fields
517+
- **Solution:** Ensure `"type": "stdio"` and `"env"` section are properly configured
512518

513519
**Problem:** Copilot uses read-only remote MCP instead of local
514520
- **Cause:** Built-in MCP not disabled
@@ -528,7 +534,7 @@ Check GitHub Copilot CLI logs (use `--log-level debug`) for these indicators:
528534

529535
**Local MCP working:**
530536
```
531-
Starting MCP client for github with command: docker
537+
Starting MCP client for github with command: npx
532538
GitHub MCP Server running on stdio
533539
readOnly=false
534540
MCP client for github connected
@@ -545,7 +551,7 @@ Starting remote MCP client for github-mcp-server
545551
For GitHub Actions workflows:
546552
1. Create MCP config script that writes to `~/.copilot/mcp-config.json` (note: `~` = `/home/runner` in GitHub Actions)
547553
2. Export both `GITHUB_TOKEN` (for GitHub Copilot CLI) and `GITHUB_PERSONAL_ACCESS_TOKEN` (for GitHub MCP server) as environment variables
548-
3. Pull the MCP server Docker image before running tests: `docker pull ghcr.io/github/github-mcp-server:v0.19.0`
554+
3. Use stdio-based MCP configuration (npx or Go binary) - Docker-based MCP servers are no longer supported as of v0.9.1
549555
4. Run awf with `sudo -E` to preserve environment variables
550556
5. Always use `--disable-builtin-mcps` and `--allow-tool github` flags when running GitHub Copilot CLI
551557

README.md

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,87 @@ A network firewall for agentic workflows with domain whitelisting. This tool pro
1010
- **L7 Domain Whitelisting**: Control HTTP/HTTPS traffic at the application layer
1111
- **Host-Level Enforcement**: Uses iptables DOCKER-USER chain to enforce firewall on ALL containers
1212

13+
## Breaking Changes
14+
15+
### v0.9.1 - Docker-in-Docker Support Removed
16+
17+
[PR #205](https://github.com/githubnext/gh-aw-firewall/pull/205) removed Docker-in-Docker support to simplify the architecture and improve security. This change affects users who were running Docker commands or Docker-based MCP servers within the firewall.
18+
19+
**What still works:**
20+
-**Network egress control** - HTTP/HTTPS domain allowlist enforcement is unchanged
21+
-**Most workflows** - GitHub Copilot CLI and Claude with stdio-based MCP servers work perfectly
22+
-**Filesystem access** - Full filesystem mounting for reading/writing files
23+
-**Command execution** - Any commands that don't require Docker
24+
25+
**What no longer works:**
26+
-**Docker commands** - `docker run`, `docker-compose`, and similar commands will fail
27+
-**Docker-based MCP servers** - MCP servers configured with `"command": "docker"` will not work
28+
29+
**Migration guide for MCP servers:**
30+
31+
If you were using a Docker-based GitHub MCP server configuration, migrate to stdio-based alternatives:
32+
33+
**Before (Docker-based):**
34+
```json
35+
{
36+
"mcpServers": {
37+
"github": {
38+
"type": "local",
39+
"command": "docker",
40+
"args": [
41+
"run", "-i", "--rm",
42+
"-e", "GITHUB_PERSONAL_ACCESS_TOKEN",
43+
"ghcr.io/github/github-mcp-server:v0.19.0"
44+
],
45+
"env": {
46+
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PERSONAL_ACCESS_TOKEN}"
47+
}
48+
}
49+
}
50+
}
51+
```
52+
53+
**After (stdio-based with npx):**
54+
```json
55+
{
56+
"mcpServers": {
57+
"github": {
58+
"type": "stdio",
59+
"command": "npx",
60+
"args": ["-y", "github-mcp-custom@1.0.20", "stdio"],
61+
"env": {
62+
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PERSONAL_ACCESS_TOKEN}"
63+
}
64+
}
65+
}
66+
}
67+
```
68+
69+
**Alternative (using Go binary):**
70+
```json
71+
{
72+
"mcpServers": {
73+
"github": {
74+
"type": "stdio",
75+
"command": "/usr/local/bin/github-mcp-server",
76+
"args": ["stdio"],
77+
"env": {
78+
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PERSONAL_ACCESS_TOKEN}"
79+
}
80+
}
81+
}
82+
}
83+
```
84+
85+
**Workarounds:**
86+
87+
If you absolutely need Docker functionality:
88+
1. **Pre-pull images**: Pull required Docker images on the host before running awf
89+
2. **Run outside firewall**: Execute Docker commands outside the firewall container
90+
3. **Use alternatives**: Consider non-Docker alternatives for your use case (e.g., stdio-based MCP servers, native binaries)
91+
92+
For more details, see the [architecture documentation](docs/architecture.md).
93+
1394
## Get started fast
1495

1596
- **Prerequisite:** Docker is running

0 commit comments

Comments
 (0)