Python Docker images with uv for dependencies and JupyterLab for data analysis.
10K+
I created this Docker image to provide a consistent, fully configured JupyterLab environment across multiple machines.
python:3.13.x-slim-trixie Docker image{python_version}+{image_variant}.{build_date} — for example, 3.13.14+slim-trixie.20260623 means Python 3.13.14, built on the slim-trixie Debian image, released on 2026-06-23.Dockerfile and a pyproject.toml.
I try to update the image whenever a new library version or a new Python patch version is released. When a new library version conflicts with existing dependencies, I resolve the issue on a case-by-case basis. For example, when migrating to pandas 3.0, shap and mlflow were excluded due to compatibility issues and may be re-added once resolved.| Tag | Python | Package manager | Description |
|---|---|---|---|
uv, latest | python:3.13.x-slim-trixie | uv | Full environment built on Python 3.13 with uv |
3.13 | python:3.13.x-slim-trixie | Poetry | Full environment built on Python 3.13 with Poetry |
lgbm_gpu | python:3.13.x-slim-trixie | Poetry | Full environment (outdated) built with GPU-compatible LGBM framework |
For a complete list of dependencies and their versions, refer to pyproject.toml in JLPE GitHub repository.
Containers run as root by default.
Pull image
docker pull vyxan/jlpe_image:<tag>
Example:
docker pull vyxan/jlpe_image:3.13
Run container (without mounts):
docker run -it -p 8888:8888 vyxan/jlpe_image:uv -c "jupyter lab --allow-root --no-browser --ip=0.0.0.0 --port=8888"
After starting, open the URL shown in the terminal (e.g. http://127.0.0.1:8888/lab?token=...) in your browser.
Note: The container entrypoint is
bash. Without a-ccommand, the container opens an interactive shell.
If you want to mount a project directory and JupyterLab configuration (located by default at $HOME/.jupyter), and start JupyterLab, run the container with the following command:
docker run -it -p 8888:8888 `
--mount type=bind,source=C:/project_directory,target=/app/project_directory `
--mount type=bind,source=C:/Users/<username>/.jupyter,target=/root/.jupyter `
vyxan/jlpe_image:<tag> -c "jupyter lab --allow-root --no-browser --ip=0.0.0.0 --port=8888"
docker run -it -p 8888:8888 \
--mount type=bind,source=/path/to/project_directory,target=/app/project_directory \
--mount type=bind,source=/path/to/.jupyter,target=/root/.jupyter \
vyxan/jlpe_image:<tag> -c "jupyter lab --allow-root --no-browser --ip=0.0.0.0 --port=8888"
If the image was built with Poetry, add poetry run before jupyter lab. Windows example:
docker run -it -p 8888:8888 `
--mount type=bind,source=C:/project_directory,target=/app/project_directory `
--mount type=bind,source=C:/Users/<username>/.jupyter,target=/root/.jupyter `
vyxan/jlpe_image:<tag> -c "poetry run jupyter lab --allow-root --no-browser --ip=0.0.0.0 --port=8888"
To connect from VS Code to a running Jupyter server, add:
--IdentityProvider.token="" --ServerApp.disable_check_xsrf=True
This is required because VS Code's Jupyter integration does not fully support Jupyter Server XSRF protection checks.
Note: These flags are intended for local development only. Do not use them when exposing Jupyter Server to external networks.
Content type
Image
Digest
sha256:9950698bb…
Size
999.6 MB
Last updated
5 minutes ago
docker pull vyxan/jlpe_image