Docker support allows you to run Serena in an isolated container environment, which provides better security isolation for the shell tool and consistent dependencies across different systems.
- Safer shell tool execution: Commands run in an isolated container environment
- Consistent dependencies: No need to manage language servers and dependencies on your host system
- Cross-platform support: Works consistently across Windows, macOS, and Linux
serena_config.docker.yml) to avoid path conflicts. When running in Docker:
- Container paths will be stored in the configuration (e.g.,
/workspaces/serena/...) - These paths are incompatible with non-Docker usage
- After using Docker, you cannot directly switch back to non-Docker usage without manual configuration adjustment
- Only mounted directories work: Projects must be mounted as volumes to be accessible
- Projects outside the mounted directories cannot be activated or accessed
- Default setup only mounts the current directory
- The GUI log window option is automatically disabled in Docker environments
- Use the web dashboard instead (see below)
The web dashboard runs on port 24282 (0x5EDA) by default. You can configure this using environment variables:
# Use default ports
docker-compose up serena
# Use custom ports
SERENA_DASHBOARD_PORT=8080 docker-compose up serena- Files edited within the Docker container may use Unix line endings (LF)
- Your Windows system may expect Windows line endings (CRLF)
- This can cause issues with version control and text editors
- Configure your Git settings appropriately:
git config core.autocrlf true
-
Production mode (for using Serena as MCP server):
docker-compose up serena
-
Development mode (with source code mounted):
docker-compose up serena-dev
Note: Edit the compose.yaml file to customize volume mounts for your projects.
# Build the image
docker build -t serena .
# Run with current directory mounted
docker run -it --rm \
-v "$(pwd)":/workspace \
-p 9121:9121 \
-p 24282:24282 \
-e SERENA_DOCKER=1 \
serenaTo use Docker Compose with merge files, you can create a compose.override.yml file to customize the configuration:
services:
serena:
# To work with projects, you must mount them as volumes:
volumes:
- ./my-project:/workspace/my-project
- /path/to/another/project:/workspace/another-project
# Add the context for the IDE assistant option:
command:
- "uv run --directory . serena-mcp-server --transport sse --port 9121 --host 0.0.0.0 --context ide-assistant"See the Docker Merge Compose files documentation for more details on using merge files.
Once running, access the web dashboard at:
- Default: http://localhost:24282/dashboard
- Custom port: http://localhost:${SERENA_DASHBOARD_PORT}/dashboard
To work with projects, you must mount them as volumes:
# In compose.yaml
volumes:
- ./my-project:/workspace/my-project
- /path/to/another/project:/workspace/another-projectSERENA_DOCKER=1: Set automatically to indicate Docker environmentSERENA_PORT: MCP server port (default: 9121)SERENA_DASHBOARD_PORT: Web dashboard port (default: 24282)INTELEPHENSE_LICENSE_KEY: License key for Intelephense PHP LSP premium features (optional)
If you see "port already in use" errors:
# Check what's using the port
lsof -i :24282 # macOS/Linux
netstat -ano | findstr :24282 # Windows
# Use a different port
SERENA_DASHBOARD_PORT=8080 docker-compose up serenaIf you need to reset Docker configuration:
# Remove Docker-specific config
rm serena_config.docker.yml
# Serena will auto-generate a new one on next runEnsure projects are properly mounted:
- Check volume mounts in
docker-compose.yaml - Use absolute paths for external projects
- Verify permissions on mounted directories
To switch between Docker and non-Docker usage:
-
Docker to Non-Docker:
- Manually edit project paths in
serena_config.yml - Change container paths to host paths
- Or use separate config files for each environment
- Manually edit project paths in
-
Non-Docker to Docker:
- Projects will be re-registered with container paths
- Original config remains unchanged
We're working on:
- Automatic config migration between environments
- Better project path handling
- Dynamic port allocation
- Windows line-ending handling.