---
title: "How to Deploy Apps with Docker Compose | Hostman Docs"
description: "Learn how to deploy applications with Docker Compose on Hostman App Platform. Manage multi-container applications with simple configurations and reliable automation."
---

> For the complete documentation index for AI agents, see [llms.txt](https://hostman.com/llms.txt).

The Apps service allows you to deploy an application using a Docker Compose file located in the repository. This enables running any type of application, including those built with frontend and backend frameworks not directly supported by the service.

## Requirements

### File Location

The `Dockerfile` and `docker-compose.yml` file must be located in the root of the connected repository. If the `Dockerfile` is located elsewhere, its path must be explicitly specified in the `docker-compose.yml` manifest. For example:

```yaml
services:
  app:
    build:
      context: ./app                        # Path to the application source code
      dockerfile: ./docker/Dockerfile.prod  # Explicit path to the Dockerfile
```

### Reserved Ports

Do not use ports 80 and 443 as host ports in the manifest. These ports are reserved for Nginx.

### Proxying

Proxying is configured for the first service listed in `docker-compose.yml`. Other services, if they have host ports defined, will be accessible only via those explicit ports. For example:

```
services:
  my-app:
    ports:
      - "9000:80"
  adminer:
    ports:
      - "8080:8080"
```

In this case, `my-app` will be available at the main domain, and `adminer` will be available at `http://<domain>:8080`.

### Restrictions on `docker-compose.yml`

The following restrictions apply to `docker-compose.yml`. Attempting to deploy a manifest containing any of these directives or parameters will result in an error.

#### Disallowed directives

The following directives cannot be used in `docker-compose.yml`:

-   `cap_add`
-   `cgroup`
-   `cgroup_parent`
-   `device_cgroup_rules`
-   `devices`
-   `extends`
-   `extra_hosts`
-   `include`
-   `ipc`
-   `network_mode: container:...`
-   `pid`
-   `privileged`
-   `security_opt`
-   `sysctls`
-   `use_api_socket`
-   `userns_mode`
-   `uts`
-   `volumes`
-   `volumes_from`

#### Disallowed parameters

The following parameters are prohibited:

-   `external` in the `volumes`, `networks`, `configs`, and `secrets` sections
-   `driver_opts`
-   `name`

#### Path traversal

Path traversal outside the allowed directory in the `file` value for `configs` and `secrets` is prohibited.

### Network Mode

The `host` network mode is not supported when configuring networking.

## Step 1. Select the Application Type

1.  Go to the [App Platform](https://my.hostman.com/apps) section and click **Create App**.
2.  Select **Docker** → **Docker Compose**.

![651936a3 83d4 4546 B96c 53abf7445ea2](https://content.hostman.com/assets/cd071860-9d75-4c53-9ca6-df30aac2a1d5.png?width=737&height=456)

## Step 2. Connect a Repository

Select the repository with the application. The `docker-compose.yml` must be placed at the root of the repository.

You can connect a repository:

-   From your GitHub, GitLab, or Bitbucket account. Click on the platform name, log in and select the desired repository. If you are already logged in, Hostman will immediately show the available repositories.
    
-   By URL, providing a link to a repository created on any platform. Click Connect the repository via URL and enter the Git URL of the repository. If the repository is private, also enter the access details.
    

Read more about connecting repositories [here](https://hostman.com/docs/app-platform/connecting-repositories).

## Step 3. Select a Branch and Commit

Select a branch for deployment. The menu displays the 200 most recent branches, as well as the default branch (`master`, `main`, or `default`) if the repository is connected via GitHub, GitLab, or Bitbucket.

By default, we enable the **Build by the last executed commit** option. In this case, the App platform will deploy the latest commit, and later will automatically rebuild the application when you add new commits to the repository. If necessary, you can [disable automatic deployment](https://hostman.com/docs/app-platform/managing-apps/#autodeploy) in the future.

If you want to select a specific commit manually, disable this option.

## Step 4. Select Server Location and Configuration

Your application must run on a separate cloud server. Select the region where the server should be located and its configuration.

You can always [upgrade](https://hostman.com/docs/app-platform/managing-apps/#changing-the-server-configuration) your server later, however, downgrading will not be possible.

## Step 5. Configure Private Network

Now, you can add the application to a private network and specify the IP address the app will use.

Note that you cannot change the private network after the deployment.

Apps with a private IP address may experience a short downtime during redeployment, as existing ports need to be freed up before the new version starts.

![07ca8daf 4933 4cfb 9ba2 Edec8c485c4c](https://content.hostman.com/assets/4bdeee3f-44ae-423c-b943-58e40928e971.png?width=708&height=294)

## Step 6. Configure the Build Settings

The App Platform will read the instructions from `docker-compose.yml` and build the application accordingly.

At this point you can set variables if necessary. If they are already specified in `docker-compose.yml` or in the `Dockerfile`, there's no need to duplicate them. Environment variables can be used both during the build stage and at application runtime. To use variables as build arguments, pass them to `docker-compose.yml` as follows:

```yaml
build:
  context: .
  args:
    - ARGUMENT_VAR=${example_var}
```

After that, the variable can be referenced in the `Dockerfile`:

```shell
ARG ARGUMENT_VAR=${example_var}
```

Later on, you will be able to [change any of these settings](https://hostman.com/docs/app-platform/managing-apps/#deploying-with-new-parameters), as well as select a different branch and commit, and restart the deployment with new settings, if necessary.

## Step 7. Enter the App Information

Here you can specify a name and a comment for your application to be displayed in the Hostman dashboard. You can also select a project to add the app to.

These settings can also be changed later.

## Step 8. Deploy

Click **Create**. Once the process starts, you will see the deployment log on the **Deploy** tab.

The deploy log contains all the necessary information to solve possible issues. If something goes wrong, for example, due to errors in the code, the deploy log will display the notification about it specifying the cause of the problem.

When you first deploy a project, the server installation may take some time. Once the process is completed, the application status will be updated, and you will also see a message about this in the log.

All done!

You can find the application's IP address and the technical domain linked to the app in the **Dashboard** tab. To link your own domain to the app, follow [this guide](https://hostman.com/docs/app-platform/managing-apps/#linking-a-domain).

The application runs on ports 80 and 443.

In the future, the [App platform](https://hostman.com/paas/) will monitor updates in the repository and, if [automatic deployment](https://hostman.com/docs/app-platform/managing-apps/#autodeploy) is enabled, automatically rebuild the project with new changes.
