Containers
Spheron Con runs a public Docker image on a GPU or a CPU, without a virtual machine to look after. Pick a size, pick an image, and the container comes up with SSH and public ports, usually within a few minutes. It is billed by the hour, like any other instance.
In the dashboard, containers are an instance type, Dedicated Containers, inside Deploy GPUs and Deploy CPU. A card that is also sold as a container lists Dedicated Containers next to Spot VMs and Dedicated VMs, with its own "from" price and stock. A GPU sold only as a container opens straight on Dedicated Containers.
When to use a container
| You want to | Use |
|---|---|
| Run an image for a few hours: a vLLM or Ollama server, a training image, Jupyter | Container |
| Start from a ready image without installing drivers, CUDA or Python | Container |
| Pay only for storage between sessions on a GPU, and come back to the same files | GPU container with Stop, or a Spheron Con volume |
| Run your own operating system, kernel modules, Docker or systemd services | GPU instance or CPU node |
| Use spot pricing, bare metal, or multi-node clusters | GPU instance |
| Run a startup script (cloud-init) | GPU instance or CPU node |
A container is not a full machine. It runs one image as its main process. There is no cloud-init, no access to the host, and no Docker inside the container. Choose a virtual machine when you need any of those.
What you get
| GPU containers | CPU containers | |
|---|---|---|
| Sizes | 28 GPU types, from RTX 2000 Ada and A40 up to H100, H200, B200 and B300, in 1, 2, 4 or 8 GPU sizes | 2, 4, 8, 16 or 32 vCPU, in compute, general purpose and memory optimized families |
| Disk | 100 GB container disk and a 500 GB volume at /workspace | 10 GB of container disk per vCPU, up to 100 GB |
| Stop and Start | Yes | No |
| Restart | Yes | Yes |
| Volumes | One Spheron Con volume, at /workspace | One Spheron Con volume |
| Instance type | Dedicated Containers (on-demand) | Dedicated Containers (on-demand) |
| Regions | North America, Europe and Asia (Japan) | North America, Europe and Asia (Japan) |
The vCPU and memory shown for a GPU container are minimums: the container gets at least that much. Availability changes quickly, and the wizard only offers what is in stock.
Templates
Start from a template, or type any public image.
| Template | Compute | Image | OS | Connect |
|---|---|---|---|---|
| PyTorch 2.11 | GPU | pytorch/pytorch:2.11.0-cuda12.8-cudnn9-runtime | Ubuntu 24.04 | SSH |
| CUDA 12.8 toolkit | GPU | nvidia/cuda:12.8.1-cudnn-devel-ubuntu24.04 | Ubuntu 24.04 | SSH |
| vLLM server | GPU | vllm/vllm-openai:latest | Ubuntu 22.04 | SSH, OpenAI-compatible API |
| SGLang server | GPU | lmsysorg/sglang:v0.5.22-runtime | Ubuntu 24.04 | SSH, API |
| Ollama | GPU | ollama/ollama:latest | Ubuntu 24.04 | SSH, API |
| Open WebUI | GPU | ghcr.io/open-webui/open-webui:ollama | Debian 13 | SSH, browser |
| TensorFlow 2.21 | GPU | tensorflow/tensorflow:2.21.0-gpu | Ubuntu 22.04 | SSH |
| Jupyter Lab with PyTorch | GPU | quay.io/jupyter/pytorch-notebook:cuda12-latest | Ubuntu 24.04 | Browser |
| Ubuntu 24.04, Ubuntu 22.04, Debian 12 | CPU | ubuntu:24.04, ubuntu:22.04, debian:12 | Same | SSH |
| Python 3.13, Node.js 24, Go 1.27, Rust | CPU | python:3.13-slim-bookworm, node:24-bookworm-slim, golang:1.27-bookworm, rust:1-bookworm | Debian 12 | SSH |
| Jupyter Lab | CPU | quay.io/jupyter/minimal-notebook:latest | Ubuntu 24.04 | Browser |
The PyTorch and CUDA templates run CUDA 12.8, which B200 and RTX 50 series GPUs need.
The vLLM and SGLang templates serve Qwen/Qwen2.5-1.5B-Instruct by default. Change the model in the start command under Customize before you deploy.
Custom image: type any public image from Docker Hub, GHCR, Quay or another registry. Spheron checks it as you type and tells you whether it exists and whether SSH will work on it. Private images are not supported yet.
Pricing and billing
- Billed from the moment it runs. A container is billed from the moment its machine starts, including while its image downloads, because the machine is reserved for you from then. Its card shows Running with Downloading the image or Starting the container until you can connect.
- The same minimum runtime as a virtual machine. A container can be terminated 20 minutes after it starts, or later where its machine type sets a longer minimum.
- Storage is included while it runs. The container disk and the
/workspacevolume are folded into the hourly price. - Stopped GPU containers bill storage only. A stopped GPU container bills only its 500 GB
/workspacevolume, at about $0.24 per GB per month: about $0.16 per hour. The deploy page and the Stop dialog both show the exact stopped rate. - A Spheron Con volume stores for less. A Spheron Con volume costs about $0.084 per GB per month, whether the container runs or not. For a container you stop often, keep files on a volume: 100 GB costs about $0.012 per hour, against about $0.16 for the stopped built-in volume.
- Your own volume lowers the container's price. A Spheron Con volume takes
/workspacein place of the built-in 500 GB volume, and the built-in volume's cost, about $0.08 per hour, is taken off the container's hourly price. The volume bills as a volume. A stopped container on its own volume bills nothing for the container itself. See Spheron Con volumes. - On-demand only. Containers have no spot pricing.
CPU containers start at about $0.08 per hour for 2 vCPU. GPU container prices are shown per offer in the wizard.
Deploy from the dashboard
Open Deploy GPUs or Deploy CPU
In the Spheron dashboard, click Deploy GPUs or Deploy CPU in the sidebar under Compute. On a card that is also sold as a container, choose Dedicated Containers, next to Spot VMs and Dedicated VMs. A GPU sold only as a container opens straight on Dedicated Containers.
Old /deploy-containers links open Deploy GPUs, or Deploy CPU for /deploy-containers?type=cpu, and switch to Dedicated Containers on the first card you pick.
Configure Instance (step 1)
Pick the GPU and count, or the vCPU size, and the region, as you would for a virtual machine.
Container (step 2)
Pick a template, with the SSH-ready ones on top, or choose Custom image and type an image.
Open Customize to set:
- Start command: replaces the image's own command, as one shell-style line.
- Open ports: up to 9, separated by commas, for example
8888, 8000. Each gets its own public address. - Environment variables: up to 50. Spheron passes the values to the container at start and keeps only their names.
SSH Key (step 3)
Pick an SSH key and, optionally, a Spheron Con volume in the same region. A browser-only image, such as Jupyter, skips SSH Key: its volume picker and Deploy Instance button sit under the Container step.
Deploy
Review the order summary and click Deploy Instance. For a GPU container, the deploy page also shows the exact rate it bills while stopped. The card shows Running with Downloading the image while the image downloads, then the connection details once the container is up.
Connect to a container
SSH
Spheron sets up SSH with your key on any image that runs as root, usually within a minute of start, even when the image has no SSH server of its own. Copy the command from the instance card:
# The user is root; the port is the container's public SSH port
ssh -p <port> root@<ip-address>Shell images such as Ubuntu, Python and PyTorch stay up with no start command, so you can SSH in and work.
Browser
Each exposed port has its own public address, shown on the instance page under the container's browser access:
http://<ip-address>:<public-port>- Jupyter templates run as a non-root user and have no SSH. The instance page shows the sign-in token and an Open Jupyter Lab signed in button.
- Open WebUI creates your admin account when it starts and closes sign-ups, so nobody who finds the address can register first. Sign in as
admin@example.comwith the password shown on the instance page. It is generated for each deploy.
A port with nothing listening on it refuses the connection. Start your service on 0.0.0.0 and the port you exposed.
Files and storage
- Keep files in
/workspace. Everything outside/workspaceis erased on Stop or Restart. On a GPU container,/workspacesurvives both. - Terminate deletes everything except an attached Spheron Con volume.
- Share data across containers with a Spheron Con volume. Several containers in the same region can use one volume at once.
Stop, Start and Restart
| Action | GPU container | CPU container |
|---|---|---|
| Stop | Keeps /workspace and an attached volume; everything else on the container disk is reset. Bills only the /workspace volume, about $0.16 per hour. | Not available. Terminate it instead. |
| Start | Comes back on the same machine, with new public ports | Not available |
| Restart | Restarts in place at the same rate. Only /workspace and an attached volume keep their files. | Same as GPU |
How containers appear in the dashboard
- Instance cards show the container's image as its operating system, for example
PyTorch 2.11 (Ubuntu 24.04). - Running with a note: Downloading the image or Starting the container while it is billed but not reachable yet.
- Amber Running badge: the container ran and now keeps exiting and restarting. Check its image and start command, then restart or terminate it.
- VMs and containers share the card. On Deploy GPUs and Deploy CPU, one card can list Spot VMs, Dedicated VMs and Dedicated Containers. A container is never a VM: Dedicated Containers deploys a container, and the VM options deploy a virtual machine.
Deploy through the API
List container offers, check the image, and deploy with a container object:
curl "https://app.spheron.ai/api/gpu-offers?computeType=gpu-container&search=a40"
curl -X POST "https://app.spheron.ai/api/deployments" \
-H "Authorization: Bearer <your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"provider": "spheron-con",
"offerId": "rpg__nvidia-a40__1__CA-MTL-1",
"gpuType": "A40_PCIE_CONTAINER",
"gpuCount": 1,
"region": "CA-MTL-1",
"instanceType": "DEDICATED",
"sshKeyId": "your_ssh_key_id",
"container": { "image": "pytorch/pytorch:latest", "ports": [8888] }
}'See Containers in the API reference for every field, the starting state, and the error codes.
Troubleshooting
Issue: The image is not found
Symptoms: The wizard says Not found, or private, or POST /api/deployments returns 400.
Diagnosis: The image name or tag is wrong, or the image is private. Nothing was created or charged.
Resolution: Check the name and tag on the registry. Use a public image.
Issue: The container failed within a few minutes
Symptoms: The card shows Failed with "The container kept stopping right after it started".
Diagnosis: The image or start command exits on its own, so the container never came up. It was shut down within about two minutes and billed only for the minutes it ran.
Resolution: Check the start command. A shell image with a command that finishes, such as echo hello, exits at once; run a long-lived process instead.
Issue: Running, but the address does not answer
Symptoms: The card shows Running with Downloading the image for several minutes.
Diagnosis: A large image is still downloading. Large images, such as vLLM or Open WebUI, can take many minutes on a busy host. A container that has not started after 90 minutes is shut down.
Resolution: Wait for the note to disappear. For faster starts, pick a smaller image.
Issue: Start is refused on a stopped GPU container
Symptoms: Start did not go through, with "that machine's GPU is in use right now".
Diagnosis: Another customer took the GPU on the machine that holds your container.
Resolution: Try again later. Your files are kept. To get a GPU now, terminate the container and deploy a new one; files on a Spheron Con volume carry over.
Issue: There is no SSH command
Symptoms: The instance page shows a browser address instead of an SSH command.
Diagnosis: The image runs as a non-root user, such as the Jupyter images, so SSH cannot be set up on it. Or it was deployed without an SSH key.
Resolution: Use its ports in the browser, or pick an image that runs as root.
What's next
- Spheron Con volumes: Shared storage at
/workspace - Instance lifecycle: Stop, Start and Restart across providers
- Billing: How running and stopped instances are charged
- API reference: The container API in full