SCIP Optimization Suite 10: Web Service and Jupyter Lab Docker Images
TL;DR: We are releasing updated Docker images for the SCIP Optimization Suite: a ready-to-use FastAPI web service and a pre-configured Jupyter Lab environment.
Sebastian Pokutta • December 1, 2025
We are releasing updated Docker images for the SCIP Optimization Suite available at
👉 https://hub.docker.com/repositories/scipoptsuite
enabling easy access to the solver via a web API or a comprehensive Jupyter Lab environment. These images are designed to minimize setup time for both teaching and production prototyping; think of this page as a replacement for the now deprecated Dockerized SCIP for Teaching.
The suite currently includes:
- SCIP 10.0.0
- PySCIPOpt 6.0.0
- Python 3.11
- OS Debian Slim
Web Service Image (scip-webservice)
The scip-webservice is a FastAPI-based web service that provides endpoints to upload MPS/LP files and solve them using SCIP. It includes a basic dashboard and upload interface.
Quick Start
You can start the service with a single command (ensure you provide a secret key):
docker run \
-p 8000:8000 \
-e API_SECRET_KEY=<random_string_of_atleast_32_characters> \
scipoptsuite/scip-webservice
Once running, you can access the interfaces:
- Dashboard: http://localhost:8000/status
- Upload UI: http://localhost:8000/upload
- API Documentation: http://localhost:8000/docs
Configuration & Parameters
You can configure the service using environment variables (-e) and Docker resource flags.
Concurrency & Limits
| Variable / Flag | Default | Description |
|---|---|---|
MAX_CONCURRENT_JOBS |
2 |
(Env Var) Maximum number of parallel solver processes. Set this based on your available CPU cores. |
JOB_RETENTION_HOURS |
24 |
(Env Var) How long to keep job results and logs before deleting them. |
MAX_UPLOAD_SIZE_MB |
1024 |
(Env Var) Max allowed file size in MB. |
--cpus |
N/A | (Docker Flag) Limit the container’s CPU usage. Recommended: MAX_CONCURRENT_JOBS * 1.0. |
--memory |
N/A | (Docker Flag) Limit the container’s memory. Recommended: 2GB per concurrent job. |
Database & Volumes
By default, the service uses SQLite. For production (e.g., Kubernetes), you can provide a PostgreSQL connection string via the DATABASE_URL environment variable.
We also recommend mounting volumes to access logs and problem files on the host:
| Volume Path | Description |
|---|---|
/app/logs |
Mount this to access server logs and solver output on the host. |
/app/problems |
Mount this to access uploaded and solved problem files. |
Example: Production-Ready Run
Run with 4 concurrent workers, 4 CPU limit, and 8GB memory:
docker run -d \
-p 8000:8000 \
-e MAX_CONCURRENT_JOBS=4 \
-e API_SECRET_KEY=your_secure_random_key \
--cpus=4.0 \
--memory=8g \
-v $(pwd)/logs:/app/logs \
-v $(pwd)/problems:/app/problems \
scipoptsuite/scip-webservice
Jupyter Lab Image (scip-jupyterlab)
A pre-configured data science environment with SCIP, PySCIPOpt, and standard Python data stacks (Pandas, NumPy, Scikit-Learn, Matplotlib). This is ideal for prototyping and interactive solving.
Quick Start
docker run -p 8888:8888 -v $(pwd):/app scipoptsuite/scip-jupyterlab
Access Jupyter Lab at http://localhost:8888.
Configuration & Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
8888 |
Port | 8888 |
The internal port for Jupyter Lab. |
JUPYTER_TOKEN |
Env Var | (Random) | Set a custom password/token for access. If not set, a random token is printed to the console on startup. |
/app |
Volume | N/A | Highly Recommended: Mount your local working directory here to save your notebooks and work. |
Authentication
Option A: Random Token (Default)
Run the container and watch the terminal output for a line like Jupyter Lab Token: 8f3a1e9c.... Use this token to log in.
Option B: Custom Token
Pass the JUPYTER_TOKEN environment variable:
docker run -p 8888:8888 \
-e JUPYTER_TOKEN=mysecretpassword \
-v $(pwd):/app \
scipoptsuite/scip-jupyterlab
Included Libraries
pyscipopt(SCIP Interface)jupyterlabnumpypandasmatplotlibscikit-learnipykernel