Translate Docker commands and Compose files to wslc, the native WSL container runtime
Project description
docker2wslc
Translate Docker commands, Compose files and dev container configs to wslc — the native Linux container runtime built into the Windows Subsystem for Linux, which runs containers on Windows 11 without Docker Desktop.
No network calls, no daemon, no telemetry. Pure rule-driven translation.
pip install docker2wslc # translation only
pip install 'docker2wslc[yaml]' # + Compose analysis
Convert a command
$ docker2wslc convert docker run --gpus all --restart always -p 8080:80 nginx
wslc run --device nvidia.com/gpu=all -p 8080:80 nginx
Migration notes
WARN Restart policies are not implemented in the wslc preview. Flag dropped — use a
Windows scheduled task or a wrapper script for auto-restart.
INFO GPU access in wslc goes through the Container Device Interface. Use
`--device nvidia.com/gpu=all` instead of `--gpus`.
Commands come from arguments, a file, or stdin:
docker2wslc convert docker ps -a
docker2wslc convert --file deploy.sh
cat deploy.sh | docker2wslc convert
Analyse a Compose file
wslc has no Compose runtime. This turns each service into an equivalent wslc run
and tells you exactly what cannot be carried over:
$ docker2wslc compose docker-compose.yml
# wslc has no Compose runtime. Equivalent commands:
wslc volume create pgdata
wslc network create backend
# service: web
wslc run -d --name web -e NGINX_HOST=localhost -p 8080:80 --network backend nginx:alpine
x depends_on: No dependency ordering. Start services in order yourself and add readiness waits.
x restart: No restart policies in the wslc preview.
# service: db
wslc run -d --name db -v pgdata:/var/lib/postgresql/data postgres:16-alpine
x healthcheck: wslc has no healthcheck support; depends_on conditions relying on it cannot work.
Lint a repository
Scans for docker-compose.y*ml, compose.y*ml and devcontainer.json:
docker2wslc lint .
Use in CI
Exit codes are meaningful, so this works as a gate:
| Code | Meaning |
|---|---|
0 |
Fully compatible |
1 |
Degraded — flags dropped or rewritten, still runnable |
2 |
Unmigratable — Compose, Swarm, buildx, or a parse failure |
- run: pip install 'docker2wslc[yaml]'
- run: docker2wslc lint . # fails the job on exit 2
Python API
from docker2wslc import translate, analyse
result = translate("docker run --platform linux/amd64 -it ubuntu bash")
print(result.output) # wslc run -it ubuntu bash
print(result.exit_code) # 1
for note in result.notes:
print(note.severity, note.text)
report = analyse(open("docker-compose.yml").read())
print(report.as_dict())
--json on any subcommand gives the same structure for shell pipelines.
What wslc cannot do
Worth knowing before you migrate. These are runtime limitations, not gaps in this tool:
- No Compose runtime — translate services by hand, see the migration guide
- No restart policies — use a scheduled task
- No
--platform— host architecture only - No healthchecks — so
depends_onconditions cannot work - No Docker socket or Engine API — Testcontainers, Portainer and act cannot attach
- No buildx / bake — single-platform
wslc buildonly - GPU via CDI —
--device nvidia.com/gpu=all, not--gpus all
CLI-driven tooling ports to wslc. API-driven tooling does not. That single distinction
explains most migration surprises — including why
VS Code Dev Containers does work
once you set dev.containers.dockerPath to wslc.
Docs
- Interactive converter — https://wslcontainers.com
- Command cheat sheet — https://wslcontainers.com/reference/cheatsheet/
- Install guide — https://wslcontainers.com/guides/install/
- wslc vs Docker Desktop — https://wslcontainers.com/guides/vs-docker-desktop/
Accuracy
Rules target the 2026-07 wslc public preview and live in a single
rules.json shared by the
Python package, the npm CLI, the MCP server and the VS Code extension. wslc is a moving
target; if you hit a mapping that is wrong,
open an issue with the command and the
actual wslc output.
MIT licensed.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file docker2wslc-0.1.0.tar.gz.
File metadata
- Download URL: docker2wslc-0.1.0.tar.gz
- Upload date:
- Size: 12.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
06945c9ea44abe502ddd02ad6cd78f9dea61909ae014c1e11d3fc95e62346ffc
|
|
| MD5 |
f4c46a267380142a98717f33bf395d8c
|
|
| BLAKE2b-256 |
9731bf1dce5321ff8a56d9a221af438af330c6984568de6471c857adbc61c542
|
File details
Details for the file docker2wslc-0.1.0-py3-none-any.whl.
File metadata
- Download URL: docker2wslc-0.1.0-py3-none-any.whl
- Upload date:
- Size: 15.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7b6d5214ac8082489fe349af20cf4f07dffe3e372d32406f13bb4d0f13097353
|
|
| MD5 |
759da4868635e1d87f9805d03e125743
|
|
| BLAKE2b-256 |
5e6640f7e8895f4902ca33f5274776f176ec86d5a96ff55121d608d10e1c7793
|