PaaS infrastructure that works everywhere

Docker container hosting and deployment

Docker container hosting: the image is built from the Dockerfile in your repository on our own runners, up to 5 builds in parallel. Automatic SSL, custom domains, our own servers in a data center.

Auto-deploy from Git

The platform pulls the code from your repository, builds the project and runs it.

Ready-made environment

No Nginx or Linux setup required. Reliable RelaxNet servers under the hood.

Custom domains and SSL

Connect your domain in one click, and the platform issues a Let's Encrypt SSL certificate automatically.

If your project already has a Dockerfile, the platform builds the image and runs the container with no extra setup: just connect the repository. It's the universal path for stacks that auto-detection doesn't cover — Go, Rust, PHP, Java, C# or setups with system dependencies.

Builds run on the platform's own runners, not on external CI: there are no build-minute limits, up to five builds run in parallel, and each one is isolated in its own container. The finished image is deployed to the platform's own servers with automatic HTTPS and is reachable from anywhere.

How to deploy Docker

1. Put a Dockerfile in the repository root

The platform finds it automatically and gives it priority over stack detection. If the Dockerfile lives in a monorepo subfolder, you can override the path in the settings.

2. Use the port from the environment variable

The container must listen on host 0.0.0.0 and the port from the PORT variable. The EXPOSE instruction is informational only — what matters is the port the process actually listens on.

FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-alpine
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY --from=build /app/node_modules ./node_modules
ENV PORT=8080
EXPOSE 8080
CMD ["node", "dist/main.js"]

3. Set environment variables

The platform passes secrets to the container at startup — don't bake them into the image via ARG or ENV in the Dockerfile, or they'll stay in the image layers.

4. Build and publish

After the build, the container gets a working HTTPS URL, and you can connect your own domain to it. Build and runtime logs are available in the dashboard, and monitoring tracks the container status.

Platform comparison

The key difference from renting a plain VPS: you don't have to run the Docker daemon yourself, write deploy scripts, set up a reverse proxy or keep an eye on certificates. You own the Dockerfile; the platform handles the build, runtime, HTTPS and restarts on failure.

Common errors and fixes

The image builds, but the container stops immediately

The CMD process exits instead of running continuously. A container lives exactly as long as its main process: it must stay in the foreground, without daemonizing.

The URL returns 502 while the container is running

The process listens on 127.0.0.1 or on a port other than PORT. localhost is isolated inside the container — bind to 0.0.0.0 and read the port from the environment variable.

The build takes too long

Copy dependency manifests in a separate layer before copying the sources — then the cache isn't invalidated on every code change. Use a multi-stage build and add a .dockerignore so node_modules and .git don't end up in the build context.

FAQ

Can I run a ready-made image from a registry?

The main workflow is building from the Dockerfile in your repository. For private base images, access is configured via the project's environment variables.

Are multi-stage builds supported?

Yes, and they're the recommended approach: they noticeably shrink the final image and speed up container startup.

What about docker-compose?

A project is deployed as a single service. Multi-service setups are assembled from several projects on the platform, linked through environment variables and a shared database.

Where can I see build logs?

The full build log and the container's runtime logs are available in real time in the project dashboard.

Is data inside the container persisted?

The container file system is ephemeral: it's reset on every rebuild. Use a database or the platform's file storage for persistent data.