> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kernelmedia.tv/llms.txt
> Use this file to discover all available pages before exploring further.

# Docker

> Run Kernel in a container, with optional NVIDIA GPU support

## Server image

```bash theme={null}
docker run -d --name kernel-server \
  -p 9014:9014 \
  -v kernel-data:/app/data \
  -v kernel-log:/app/log \
  -v /path/to/your/media:/media \
  kernelmedia/server:latest
```

* The image bundles jellyfin-ffmpeg, so there's no separate ffmpeg install.
* `/app/data` holds the database (SQLite by default) and config; `/app/log` holds logs. Mount both as volumes so an upgrade (pulling a new image) doesn't lose them.
* The container listens on port `9014` and binds all interfaces inside the container, so only `-p 9014:9014` controls what's reachable.

<Note>
  Setting `KERNEL_HOST` has no effect. The server always binds to all interfaces inside the container. Use Docker's `-p` mapping to control external access instead.
</Note>

<h2 id="nvidia">
  NVIDIA GPU acceleration
</h2>

Use the same image with the [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) installed on the host:

```bash theme={null}
docker run -d --name kernel-server \
  --gpus all \
  -p 9014:9014 \
  -v kernel-data:/app/data \
  -v kernel-log:/app/log \
  -v /path/to/your/media:/media \
  kernelmedia/server:latest
```

## Environment variables

| Variable | Purpose |
| - | - |
| `KERNEL_PORT` | Port the server listens on (default `9014`) |
| `KERNEL_MANAGED` | Set by Linux packages (`apt`/`yum`) to disable the in-app updater. Leave unset in Docker. |
| `KERNEL_FFMPEG`, `KERNEL_FFPROBE`, `KERNEL_FPCALC` | Override the bundled binary paths |
| `KERNEL_MAX_NVENC_SESSIONS` | Cap concurrent NVENC transcode sessions |
| `KERNEL_UPDATES_API` | Override the update-check endpoint (defaults to `https://api.kernelmedia.tv`) |

See [Configuration](/setup/configuration) for the full list, including database and directory settings.

<Tip>
  After the container starts, open `http://<host>:9014` to run the [setup wizard](/setup/first-run).
</Tip>

## Updating

Pull the new image and recreate the container. Don't use the in-app updater inside Docker. See [Updating](/updating#docker) for why.

```bash theme={null}
docker pull kernelmedia/server:latest
docker stop kernel-server && docker rm kernel-server
# re-run the docker run command above
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.