Homarr gives your self-hosted services one start page, but the dashboard should not become a shortcut to handing an app control of your Docker daemon. This setup uses Docker Compose, keeps Homarr data in a host directory, and makes the Docker socket an explicit decision instead of a default.
What you need before installing Homarr
You need a Linux host with Docker Engine and the Docker Compose plugin working. Run the two checks below before creating the dashboard, then use the current Docker installation instructions for your distribution if either command fails.
docker --version
docker compose version
Homarr publishes a current Docker installation path in its Docker documentation. Docker Compose keeps the image, port, environment, and persistent mount in one file, which makes the service easier to inspect and update than a long detached command.
Use Docker and Podman concepts to understand the container model, then follow the Docker installation walkthrough for Ubuntu when it matches your host.
Create the Compose project
Create the project directory under the account that will run Compose so the service definition and persistent Homarr data stay together.
mkdir -p ~/homarr
cd ~/homarr
openssl rand -base64 32
Copy the generated value into SECRET_ENCRYPTION_KEY and store it in a private environment file or secret manager, because changing it later can prevent Homarr from reading encrypted local data.
services:
homarr:
container_name: homarr
image: ghcr.io/homarr-labs/homarr:latest
restart: unless-stopped
ports:
- "7575:7575"
volumes:
- ./appdata:/appdata
# Remove this mount unless you need Docker integration.
- /var/run/docker.sock:/var/run/docker.sock
environment:
- SECRET_ENCRYPTION_KEY=replace-with-a-32-byte-base64-value
Save the file as compose.yaml. The image reference is ghcr.io/homarr-labs/homarr:latest.
Decide whether Homarr should reach Docker
The Docker socket mount is powerful because it gives a process inside the container a direct route to the Docker service. Homarr documents the mount for its Docker integration, but a bookmark dashboard does not need it.
| Your goal | Compose choice | Why it matters |
|---|---|---|
| Links and dashboard widgets only | Remove the Docker socket volume | Homarr cannot inspect or act on containers. |
| Container status and Docker controls | Keep the Docker socket volume | Homarr can communicate with the local Docker service. |
| Dashboard exposed beyond a trusted LAN | Remove the socket and restrict access | A dashboard compromise should not become Docker-daemon access. |
Read container image security guidance before relying on a floating latest tag for a service that reaches other infrastructure.
Start Homarr and verify the container
Run these commands from the directory containing compose.yaml. Docker Compose downloads the image when needed, then starts the declared service in the background.
docker compose up -d
docker compose ps
Open http://SERVER_IP:7575 from a browser on your trusted network. Complete Homarr’s first-run setup, then add one low-risk bookmark before connecting a service that needs credentials or a privileged integration.
If the page is unreachable, first confirm that port 7575 is published and that the host firewall allows access from the network you intend to use. Linux firewall and access-control basics can help you narrow that boundary without exposing the dashboard broadly.
Add services without confusing authentication and access
A dashboard link is not an authorization layer. Homarr can make a private service convenient to open, but each application still needs its own authentication, updates, backups, and network policy.
Use distinct credentials for connected services and avoid putting administrator tokens into a dashboard merely to show a status tile. If the server has multiple users, the Linux users, groups, and permissions guide is the right next step for separating routine administration from broad host access.
Update and roll back safely
Check the current Homarr Docker documentation before an upgrade, then pull and recreate the service from the same project directory. The appdata directory is the state you need to back up before changing the image.
docker compose pull
docker compose up -d
docker compose ps
The strongest objection to this setup is fair. Mounting the Docker socket can turn a dashboard into a high-impact administrative surface, so keep it only when Docker integration is worth that tradeoff and do not expose the dashboard publicly without an access design.
Verify your Homarr setup
- docker compose ps reports the Homarr service as running.
- http://SERVER_IP:7575 loads from the intended trusted network.
- The appdata directory exists beside compose.yaml.
- SECRET_ENCRYPTION_KEY is stored outside public source control.
- The Docker socket mount is present only when you need Docker integration.
Start with one bookmark, one bounded integration, and a backup of appdata. When the server feels slow, use CPU, disk, and memory checks to diagnose the host instead of granting the dashboard more control.
Sources
Homarr Docker installation documentation and Homarr Docker integration documentation provide the current image and Docker-integration guidance. Docker Compose documentation explains the Compose service model used here.
