Skip to main content
Updated October 19, 2026 Run an image you already built, or any public image, without a build step. Raff pulls the image, starts it and gives a website or API an https address. Use this when your CI builds the image, or to run an open-source app that ships as an image.

Before you start

  • A Raff account and a project to create the app in.
  • A public image on Docker Hub, GitHub Packages or another registry, for example nginx:1.27-alpine or ghcr.io/you/app:latest.
  • The port the image listens on, for a website, API or private service.

Steps

1

Open the create page

Go to Apps and click New service. On the Deploy an app page, choose Docker image.
2

Enter the image

Type the image in Image, for example nginx:1.27-alpine, and click Continue.
TODO: Docker image tab with the Image field
3

Name it and say what it is

Under App, set the Name and pick What it is: Website or API, Background worker, Private service, Scheduled task or Runs once. See App types.For a website, API or private service, set Port to the port the image listens on. It starts at 8080; nginx listens on 80.
4

Pick a size

Under Size, pick the CPU and memory for each instance, from 0.25 vCPU · 512 MB (3amonth)to8vCPU⋅16GB(3 a month) to 8 vCPU · 16 GB (119.99 a month). You can change it any time.
5

Add a database and settings (optional)

  • Database: keep No database, or create Postgres with the app. See Add a Postgres database to an app.
  • Environment variables: paste a .env file, one KEY=value per line.
  • Start command: leave it empty to use the image’s own command, or type one to replace it.
6

Deploy

Check the Summary and click Deploy. On a monthly account you pay at checkout first.

Verify

The app page shows Got the image, Starting and Live. There is no build step. Raff marks the app Live once it answers on its port. If the deploy fails, the app page says why, for example that Raff cannot pull the image or that the app does not accept connections on its port. For a wrong port, fix HTTP port in Settings > Runtime and the app deploys again.

Run a new version of the image

Redeploy runs the exact image that is live now. It does not pull a newer image, even for a tag such as latest. To run a new version, deploy it by its tag with the API or the CLI below.

Use the API

Create the app and deploy it at once. Set builder to image and deploy_now to true:
tier_id is the size: 1 is 0.25 vCPU · 512 MB, 2 is 0.5 vCPU · 1 GB, up to 6. List them with List Apps tiers. The response has the new app with its service_id, which the other calls use. See Create app service. Deploy a new version of the image:
See Create deployment.

Use the CLI

The CLI has no port option, so a website created with it listens on 8080. For another port, create the app in the dashboard or with the API.

Next steps

Set environment variables

Add settings and secrets.

Add a custom domain

Serve the app on your own domain.
Last modified on October 19, 2026