lspcontainers/dockerfiles
July 17, 2025 ยท View on GitHub
๐ Dockerfiles for Language Server Protocol (LSP) servers - Containerized language servers for use with lspcontainers.nvim.
๐ What is this?
This repository provides production-ready Docker containers for 25+ Language Server Protocol (LSP) servers, designed to work seamlessly with the lspcontainers.nvim Neovim plugin.
๐ฏ How it works:
- Docker containers provide isolated, reproducible LSP server environments
- lspcontainers.nvim plugin automatically manages these containers in Neovim
- Zero local installation - no need to install language servers on your system
Perfect for:
- Consistent development environments across teams and machines
- Clean system - no language server pollution on your host
- Reproducible builds with pinned package versions
- Easy switching between language server versions
๐ ๏ธ Supported Language Servers
| Language | Server | Container | Version |
|---|---|---|---|
| Bash | bash-language-server | lspcontainers/bash-language-server | |
| C/C++ | clangd | lspcontainers/clangd-language-server | |
| C# | omnisharp | lspcontainers/omnisharp-language-server | |
| CSS/SCSS/Less | vscode-css-languageserver | lspcontainers/css-language-server | |
| Deno | deno-lsp | lspcontainers/deno-language-server | |
| Docker | dockerfile-ls | lspcontainers/docker-language-server | |
| ESLint | eslint-languageserver | lspcontainers/eslint-language-server | |
| Go | gopls | lspcontainers/gopls | |
| GraphQL | graphql-language-service | lspcontainers/graphql-language-server | |
| HTML | html-languageserver | lspcontainers/html-language-server | |
| JavaScript/TypeScript | typescript-language-server | lspcontainers/typescript-language-server | |
| JSON | vscode-json-languageserver | lspcontainers/json-language-server | |
| Lua | lua-language-server | lspcontainers/lua-language-server | |
| PHP | intelephense | lspcontainers/php-language-server | |
| PowerShell | powershell-es | lspcontainers/powershell-language-server | |
| Prisma | prisma-language-server | lspcontainers/prisma-language-server | |
| Python | pylsp | lspcontainers/python-lsp-server | |
| Python | pyright | lspcontainers/pyright-language-server | |
| Ruby | solargraph | lspcontainers/ruby-language-server | |
| Rust | rust-analyzer | lspcontainers/rust-analyzer | |
| Svelte | svelte-language-server | lspcontainers/svelte-language-server | |
| Tailwind CSS | tailwindcss-language-server | lspcontainers/tailwindcss-language-server | |
| Terraform | terraform-ls | lspcontainers/terraform-ls | |
| Vue | volar | lspcontainers/volar-language-server | |
| Vue | vuels (legacy) | lspcontainers/vue-language-server | |
| XML | lemminx | lspcontainers/xml-language-server | |
| YAML | yaml-language-server | lspcontainers/yaml-language-server |
๐ Quick Start
Using with lspcontainers.nvim (Recommended)
These containers are designed to work with the lspcontainers.nvim plugin.
๐ See the plugin documentation for installation and setup instructions.
Building Containers Locally
# Clone the repository
git clone https://github.com/lspcontainers/dockerfiles.git
cd dockerfiles
# Build a specific server
docker-compose build gopls
# Build all servers
docker-compose build
# Build all servers in parallel (faster!)
docker-compose build --parallel
๐ Prerequisites
- Docker Engine (20.10+)
- Docker Compose (2.0+)
๐๏ธ Architecture & Design
๐ Reproducible Builds
All containers use pinned package versions for complete reproducibility:
- Base images: Specific Alpine/Debian versions
- System packages: Exact apk/apt package versions
- Language packages: Pinned npm, gem, pip, go module versions
๐๏ธ Minimal & Secure
- Alpine Linux base for minimal attack surface
- Multi-stage builds where applicable
- Non-root users for security
- Distroless principles - only essential components
๐ Automated Updates
- Daily builds via GitHub Actions
- Dependency scanning and security updates
- Version tracking of upstream language servers
๐ค Contributing
We're actively looking for contributors! Here's how you can help:
๐ Report Issues
Found a bug or have a feature request? Open an issue!
๐ง Add New Language Servers
Want to add support for a new language? We'd love your contribution!
- Fork the repository
- Create a new directory under
servers/your-language-server/ - Write a Dockerfile following our patterns:
FROM alpine:3.22.1 ARG VERSION=1.2.3 LABEL version="${VERSION}" RUN apk add --no-cache \ nodejs=22.16.0-r2 \ npm=11.3.0-r0 \ && npm install -g \ your-language-server@${VERSION} CMD [ "your-language-server", "--stdio" ] - Add to docker-compose.yaml
- Test your build:
docker-compose build your-server - Submit a pull request
๐ ๏ธ Improve Existing Containers
- Update language server versions
- Improve Dockerfile efficiency
- Add missing tools or dependencies
- Enhance security
๐ Documentation
- Improve README files
- Add usage examples
- Write integration guides
- Create tutorials
๐ท๏ธ Container Versioning
Every container provides two tags:
latest- Latest build from main branchvX.Y.Z- Pinned version of the language server
# Always latest
docker pull lspcontainers/gopls:latest
# Specific version for production
docker pull lspcontainers/gopls:v0.19.1
๐ Updating Dockerfile Versions
Each Dockerfile includes version information that controls both the language server version and container tagging:
# Version is declared at the top
ARG VERSION=1.2.3
LABEL version="${VERSION}"
# Version variable is used in installation
RUN npm install -g your-language-server@${VERSION}
To update a language server version:
- Edit the Dockerfile in
servers/your-server/Dockerfile - Update the VERSION argument to the new version
- Test the build locally:
docker-compose build your-server - Submit a pull request with your changes
The CI/CD pipeline automatically:
- Extracts the version from the
LABEL versiondirective - Tags the image with both
latestand the specific version - Pushes to Docker Hub with proper versioning
Example version update:
# Before
ARG VERSION=1.2.3
# After
ARG VERSION=1.3.0
This ensures reproducible builds and allows users to pin to specific language server versions.
๐ Project Stats
- 25+ Language Servers supported
- 100% reproducible builds with pinned versions
- Multi-architecture support (amd64, arm64)
- Active community with regular contributions
Ready to contribute? Check out our Contributing Guide and join our community of developers making language servers more accessible!