Skip to main content

Container images

When you launch a GPU instance or cluster, you specify a container image — a Docker image URL EcoLink pulls and runs. You can either type the image URL fresh every time, or save images to your registry for one-click reuse.

Saved images (the Registry)

The Registry (Registry → Images in the sidebar) is your per-account catalog of images you use regularly. Once saved, the image appears in the launch dialog's dropdown instead of requiring a full URL every time.

Save an image

  1. Console → Registry → Images → Add image.

  2. Fill in:

    • Name — short friendly label
    • Image URL — the full pullable reference (nvidia/cuda:12.3.2-cudnn9-devel-ubuntu22.04, ghcr.io/me/my-image:v3, etc.)
    • Default command — optional override for the image's CMD
    • Description — what it has / when to use it
  3. Save. The image now shows up in the launch dropdown.

Using private registries

EcoLink's pullers have read access to:

  • Docker Hub (public images)
  • ECR public
  • GHCR public

For private registries, bake credentials into a public intermediary OR push your image to a public ECR repo in our account. Ping the #ecolink-support Slack channel if you have private-registry needs — we can set up a pull secret for enterprise customers.

Image requirements

For a container to run well on EcoLink GPU instances:

  • Linux x86_64 — we don't support ARM or Windows.
  • Expects CUDA — the image should have CUDA libraries (from NVIDIA's base images, or installed as part of your build). The NVIDIA container runtime on our nodes exposes the GPU; the rest is up to the image.
  • Runs as a long-lived process — if the image's default command exits immediately, the pod terminates. Use CMD ["sleep", "infinity"] or a real server process to keep it alive.
  • Listens on expected ports — if you want a public URL (opt-in on instances and clusters, built-in for model instances), the container must bind to the service port you specify and listen on 0.0.0.0, not 127.0.0.1. Without a public URL, port choice is up to you (Jupyter uses 8888 by convention).

Common images

Base CUDA

  • nvidia/cuda:12.3.2-cudnn9-devel-ubuntu22.04 — general CUDA dev environment

Frameworks

  • quay.io/jupyter/pytorch-notebook:cuda12-latest — PyTorch + Jupyter
  • quay.io/jupyter/tensorflow-notebook:cuda-latest — TensorFlow + Jupyter
  • pytorch/pytorch:2.4.1-cuda12.1-cudnn9-runtime

Inference engines

  • vllm/vllm-openai:latest — vLLM OpenAI-compatible server
  • ghcr.io/huggingface/text-generation-inference:3.0.0 — HF TGI
  • ghcr.io/ggerganov/llama.cpp:full-cuda — llama.cpp with CUDA

Image/video/audio

  • black-forest-labs/flux-schnell:... — FLUX image generation
  • fedirz/faster-whisper-server:0.6.0-rc.4 — Whisper STT
  • ghcr.io/remsky/kokoro-fastapi-gpu:latest — Kokoro TTS

Building your own image

If none of the above fit, build your own. Minimal example:

FROM nvidia/cuda:12.3.2-cudnn9-devel-ubuntu22.04

RUN apt-get update && apt-get install -y python3 python3-pip git && rm -rf /var/lib/apt/lists/*

RUN pip install torch==2.4.1 transformers==4.45.0

WORKDIR /app
COPY server.py .

EXPOSE 8000
CMD ["python3", "-u", "server.py"]

Build, push to a public registry (Docker Hub or GHCR), then reference username/image:tag when you launch.

Tips

  • Pin versions (:v1.2.3) rather than :latest — reproducibility matters when you return to a project after a month.
  • Keep images slim — our pullers are fast but a 20 GB image still takes longer than a 2 GB image. Multi-stage builds help.
  • Test locally with docker run --gpus all before relying on it — catches missing CUDA deps early.
  • Use saved images for anything you use twice — saves typos and keeps your launch dialog tidy.