PyVista within a Docker Container#

You can use pyvista from within a docker container with jupyterlab. To launch a local docker container, install docker, then pull and run the image with:

docker run -p 8888:8888 ghcr.io/pyvista/pyvista:latest

Finally, open the link that shows up from the terminal output and start playing around with pyvista in jupyterlab. For example:

To access the notebook, open this file in a browser:
    file:///home/jovyan/.local/share/jupyter/runtime/nbserver-6-open.html
Or copy and paste one of these URLs:
    http://861c873f6352:8888/?token=b3ac1f6397188944fb21e1f58b673b5b4e6f1ede1a84787b
 or http://127.0.0.1:8888/?token=b3ac1f6397188944fb21e1f58b673b5b4e6f1ede1a84787b

Note

You can see the latest tags of our Docker containers here. ghcr.io/pyvista/pyvista:latest has JupyterLab set up while ghcr.io/pyvista/pyvista:latest-slim is a lightweight Python environment without Jupyter

Note

You may need to log into the GitHub container registry by following the directions at Working with the Docker registry)

Create your own Docker Container with PyVista#

Both the latest and latest-slim images are produced from a single multi-stage Dockerfile at docker/Dockerfile. The PyVista wheel is built inside the Docker build, so no pre-build steps are required. Clone the repository and run docker build from the project root:

git clone https://github.com/pyvista/pyvista
cd pyvista

# JupyterLab image (equivalent to ghcr.io/pyvista/pyvista:latest)
docker build -f docker/Dockerfile --target jupyter -t my-pyvista-jupyter .

# Slim off-screen image (equivalent to ghcr.io/pyvista/pyvista:latest-slim)
docker build -f docker/Dockerfile --target slim -t my-pyvista-slim .

The jupyter target installs the jupyter, colormaps, and io optional dependency groups directly from pyproject.toml, so the package set always matches the project’s pins. There is no separate requirements.txt to keep in sync.

Override the Python version (must match a supported VTK wheel) via a build argument:

docker build --build-arg PY_VERSION=3.12 \
  -f docker/Dockerfile --target jupyter -t my-pyvista-jupyter .

GPU Rendering with the NVIDIA Container Runtime#

Both published images ship with libegl1 and set NVIDIA_VISIBLE_DEVICES=all plus NVIDIA_DRIVER_CAPABILITIES=graphics,utility,compute. VTK 9.5+ picks the vtkEGLRenderWindow automatically, so rendering uses the host’s NVIDIA driver when the container is started with the NVIDIA container runtime:

docker run --rm --gpus all -p 8888:8888 ghcr.io/pyvista/pyvista:latest

The only host-side requirement is the NVIDIA Container Toolkit. No in-container driver install, no kernel modules, no version matching against the host driver. On CPU-only hosts (no --gpus) the same image transparently falls back to Mesa’s llvmpipe software renderer via EGL.

To verify you are rendering on a GPU, inspect pv.Report() from inside the container:

import pyvista as pv

print(pv.Report())

The GPU Vendor and GPU Renderer fields should report the NVIDIA driver and the GPU model. Render Window should read vtkEGLRenderWindow.