Skip to content

Use ENTRYPOINT + CMD pattern in Dockerfile#63

Merged
r33drichards merged 3 commits into
mainfrom
dockerfile-entrypoint
Feb 28, 2026
Merged

Use ENTRYPOINT + CMD pattern in Dockerfile#63
r33drichards merged 3 commits into
mainfrom
dockerfile-entrypoint

Conversation

@r33drichards

Copy link
Copy Markdown
Owner

Summary

  • Split CMD ["mcp-v8", "--sse-port", "8080", "--stateless"] into ENTRYPOINT ["mcp-v8"] + CMD ["--sse-port", "8080", "--stateless"]
  • This follows Docker conventions and is required for the Docker MCP Registry, which overrides CMD to pass --stateless (stdio transport) for tool discovery

Context

The Docker MCP Registry (docker/mcp-registry) expects servers to use ENTRYPOINT for the binary so it can override just the arguments via run.command in server.yaml. Without this, the registry entry has to include the binary name in the command list, which is non-standard.

No behavior change for existing users — docker run works the same way. The only difference is that docker run <image> --stateless now works without repeating mcp-v8.

🤖 Generated with Claude Code

Split the CMD into ENTRYPOINT for the binary and CMD for default
arguments. This follows Docker conventions and allows orchestrators
like the Docker MCP Registry to override just the arguments without
repeating the binary name.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Feb 28, 2026

Copy link
Copy Markdown

MCP-V8 Load Test Benchmark Report

Comparison of single-node vs 3-node cluster at various request rates.

Results

Topology Target Rate Actual Iter/s HTTP Req/s Exec Avg (ms) Exec p95 (ms) Exec p99 (ms) Success % Dropped Max VUs
cluster-stateful 100/s 74.9 74.9 1213.34 3718.47 3866.14 100% 1242 100
cluster-stateful 200/s 72.4 72.4 2541.8 7409.53 7695.6 100% 7160 200
cluster-stateless 1000/s 996.4 996.4 18.62 67.95 287.82 55.7% 199 181
cluster-stateless 100/s 100 100 12.43 18.49 24.44 100% 0 10
cluster-stateless 200/s 200 200 12.78 19.9 26.16 100% 0 20
cluster-stateless 500/s 499.9 499.9 9.94 21.34 29.08 70.9% 0 50
single-stateful 100/s 47.6 47.6 2005.66 2186.36 2232.87 100% 3050 100
single-stateful 200/s 47.9 47.9 3955.64 4323.99 4370.11 100% 8922 200
single-stateless 1000/s 1000 1000 0 0 0 0% 0 100
single-stateless 100/s 100 100 16.11 26.9 41.59 100% 1 11
single-stateless 200/s 200 200 16.19 27.01 41.58 100% 0 20
single-stateless 500/s 494 494 107.14 498.41 608.23 95.6% 362 289

P95 Latency

Topology Rate P95 (ms)
cluster-stateful 100/s 3718.47 ████████████████████████████
cluster-stateful 200/s 7409.53 ██████████████████████████████
cluster-stateless 100/s 18.49 ██████████
cluster-stateless 200/s 19.9 ██████████
cluster-stateless 500/s 21.34 ██████████
cluster-stateless 1000/s 67.95 ██████████████
single-stateful 100/s 2186.36 ██████████████████████████
single-stateful 200/s 4323.99 ████████████████████████████
single-stateless 100/s 26.9 ███████████
single-stateless 200/s 27.01 ███████████
single-stateless 500/s 498.41 █████████████████████
single-stateless 1000/s 0 ``

Notes

  • Target Rate: The configured constant-arrival-rate (requests/second k6 attempts)
  • Actual Iter/s: Achieved iterations per second (each iteration = 1 POST /api/exec)
  • HTTP Req/s: Total HTTP requests per second (1 per iteration)
  • Dropped: Iterations k6 couldn't schedule because VUs were exhausted (indicates server saturation)
  • Topology: single = 1 MCP-V8 node; cluster = 3 MCP-V8 nodes with Raft

r33drichards and others added 2 commits February 28, 2026 14:09
Now that the Dockerfile uses ENTRYPOINT for the binary, the compose
command sections only need arguments. Also switch docker-compose.yml
from pre-built image to build: . so CI tests the actual Dockerfile.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The tmpfs mount at /data defaults to root ownership, but the container
runs as mcpuser (uid 1000). Set uid=1000,gid=1000 on the tmpfs mount
so heap snapshots can be written.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@r33drichards r33drichards merged commit e1f2556 into main Feb 28, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant