Deploy a Docker image

Run an image that is already built, from any registry you can reach.

Run an image that is already built, from Docker Hub, GitHub Container Registry, or any registry you can reach. There is no build step: you give a reference such as nginx:1.27-alpine or ghcr.io/acme/api:v2.3.1, and the agent pulls and starts it.

Use it for software you did not write, like a database viewer, a metrics dashboard or a game server, and for images your own CI already builds.

Because nothing is built, there is no build log, no build cache, no build server, and no rollback. Changing the tag is your version control.

Deploy one

Start a new app

Add new, then Application.

Pick the image

Pick the Docker Image tile and type the image reference. The name field autocompletes from Docker Hub, and tags are checked against any registry credentials you added. The App name is filled in from the image.

The Docker Image source step of the wizard

Deploy

There are no build settings for an image app. The server is under Advanced, already picked. Click Deploy.

The port

Deplo reads the port from the image. Most images declare one with EXPOSE: nginx and traefik/whoami use 80, redis uses 6379. An image that declares several ports, or none, gets 3000.

Before the first deploy, the port is under Advanced -> Port in the wizard. After that, it lives on each hostname in the app's Domains tab, in the Application port field. Changing it applies in seconds without a redeploy. This is also how one image serves two hostnames on two different ports.

Private registries

Add credentials once in Settings -> Registries and every app on the team can pull from that registry. The password is encrypted and never returned. See Container registries.

Settings -> Registries, where the credentials for a private image live

Settings that matter for an image app

SettingWhereNote
Image referenceSettings -> DeploymentsChange it and redeploy to change version
PortDomains, per hostnameAn image app has no build settings card
Environment variablesEnvironmentThe normal way to configure this kind of software
VolumesSettings -> StorageYou must type the full mount path
Resource limitsSettings -> ResourcesUseful for software you did not write

Good to know

  • No rollback. Pin a specific tag or a digest instead of latest if you want to go back to a known version.
  • latest does not re-pull by itself. Redeploying pulls again. Nothing watches the registry for you.
  • The mount path is not guessed. For a prebuilt image you type the full path, like /app/uploads.
  • Multi-container software needs Compose. If the vendor ships a docker-compose.yml, use Compose apps or look in Templates.

Troubleshooting

SymptomWhat to check
pull access deniedThe image is private and no registry credential matches its host. Add one in Settings -> Registries.
The container starts and exits immediatelyIt usually needs a variable or a volume. Read the Logs.
The URL answers 502Wrong port. Deplo could not read one from the image and used 3000. Set Application port on the domain.

More in Deploys and builds.

Next steps

Did this page help you?

On this page