---
title: Troubleshooting
description: Solve the most common problems that occur when using Dokploy.
---

## Applications Domain Not Working?

You see the deployment succeeded, and logs are running, but the domain isn't working? Here's what to check:

1. **Correct Port Mapping**: Ensure the domain is using the correct port for your application. For example, if you're using Next.js, the port should be `3000`, or for Laravel, it should be `8000`. If you change the app port, update the domain to reflect that.
2. **Avoid Using `Ports` in Advanced Settings**: Generally, there's no need to use the `Ports` feature unless you want to access your app via `IP:port`. Leaving this feature enabled may interfere with your domain.

3. **Let's Encrypt Certificates**: It's crucial to point the domain to your server's IP **before** adding it in Dokploy. If the domain is added first, the certificate won't be generated, and you may need to recreate the domain or restart Traefik.

4. **Listen on 0.0.0.0, Not 127.0.0.1**: If your app is bound to `127.0.0.1` (which is common in Vite apps), switch it to `0.0.0.0` to allow external access.

## Logs and Monitoring Not Working After Changing Application Placement?

This is expected behavior. If the application is running on a different node (worker), the UI won't have access to logs or monitoring, as they're not on the same node.

## Mounts Are Causing My Application Not to Run?

Docker Swarm won't run your application if there are invalid mounts, even if the deployment shows as successful. Double-check your mounts to ensure they are valid or check the General Swarm Section
and find your application, and you will see the real error.

## Volumes in Docker Compose Not Working?

For Docker Compose, all file mounts defined in the `volumes` section will be stored in the `files` folder. This is the default directory structure:

## I added a volume to my docker compose, but is not finding the volume?

For docker compose all the file mounts you've created in the volumes section will be stored to files folder, this is the default structure of the docker compose.

```
/application-name
    /code
    /files
```

So instead of using this invalid way to mount a volume:

```yaml
volumes:
    - "/folder:/path/in/container" ❌
```

You should use this format:

```yaml
volumes:
    - "../files/my-database:/var/lib/mysql" ✅
    - "../files/my-configs:/etc/my-app/config" ✅
```

## Logs Not Loading When Deploying to a Remote Server?

There are a few potential reasons for this:

1. **Slow Server:**: If the server is too slow, it may struggle to handle concurrent requests, leading to SSL handshake errors.
2. **Insufficient Disk Space:** If the server doesn't have enough disk space, the logs may not load.

## Docker Compose Domain Not Working?

When adding a domain in your Docker Compose file, it's not necessary to expose the ports directly. Simply specify the port where your app is running. Exposing the ports can lead to conflicts with other applications or ports.

Example of what not to do:

```yaml
services:
  app:
    image: dokploy/dokploy:latest
    ports:
      - 3000:3000
```

Recommended approach:

```yaml
services:
  app:
    image: dokploy/dokploy:latest
    ports:
      - 3000
      - 80
```

This is only valid for Docker Compose not for Docker Stack.

When using Docker Stack, the ports are exposed automatically, so you don't need to specify them explicitly.

Example of what not to do:

```yaml
services:
  app:
    image: dokploy/dokploy:latest
    ports:
      - 3000
```

Recommended approach:

```yaml
services:
  app:
    image: dokploy/dokploy:latest
    expose:
      - 3000
```

Then, when creating the domain in Dokploy, specify the service name and port, like this:

```yaml
domain: my-app.com
serviceName: app
port: 3000
```

## Getting "Bad Gateway Error" When Accessing Your Application Domain

If you're encountering a Bad Gateway Error when accessing your application through its domain, this typically indicates one of several common configuration issues:

### Common Causes
1. **Port Mismatch**: The configured port might be incorrect
2. **Listen Address Configuration**: The service might be listening only on `127.0.0.1` instead of `0.0.0.0`

### Common Solution for Modern JavaScript Frameworks
This issue frequently occurs with modern JavaScript frameworks like Vite, Astro, or Vue.js applications. By default, these frameworks often listen only on localhost (`127.0.0.1`).

To resolve this, you need to configure your application to listen on all available network interfaces (`0.0.0.0`).

#### Example Configuration for Vite
Here's how to properly configure a Vite application:

```ts
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";

export default defineConfig({
	plugins: [react()],
	preview: {
		port: 3000,
		host: true,    // This enables listening on all network interfaces
	},
	server: {        // Also add this for development server
		host: true,    // This enables listening on all network interfaces
		port: 3000
	}
});
```

### Framework-Specific Notes
- **Vite Apps**: Use the configuration above
- **Astro**: Similar configuration in `astro.config.mjs`
- **Vue.js**: Configure in `vite.config.js` if using Vite
- **Other Frameworks**: Check your framework's documentation for network interface configuration

Remember to deploy again your application after making these changes for them to take effect.

## Docker Compose Volume Mounts

When using Docker Compose, you can configure volume mounts in your `docker-compose.yml` file:

```yaml
volumes:
  - my-database:/var/lib/mysql
```

### Creating Configuration Files

If you need to create configuration files before deploying your compose setup:

1. Go to Advanced -> Mounts
2. Create a new File Mount
3. Add your configuration content in the content field
4. Specify the file path for your configuration

Note: All File Mounts are automatically created in the `/files` directory. For example, if you create a file named `my-config.json`, it will be available at `/files/my-config.json`.

You can then reference this configuration file in your `docker-compose.yml`:

```yaml
volumes:
  - ../files/my-config.json:/etc/my-app/config
```


## Failed to initialize Docker Swarm

Error response from daemon: must specify a listening address because the address to advertise is not recognized as a system address, and a system's IP address to use could not be uniquely identified

This error occurs when the Docker Swarm is not properly initialized.

To fix this, you need to assign a the public IP address to the Docker Swarm, ideally you can use a private IP address from your network, but if you require features from docker swarm, you
will need to use a public IP address.

```bash
curl -sSL https://dokploy.com/install.sh | ADVERTISE_ADDR=your-ip sh
```
