← All Guides
beginner

Portainer: Docker Management UI Setup Guide

Install Portainer to manage your Docker containers, stacks, volumes, and images through a web interface instead of the command line.

Budget Homelab ·
dockerhomelabbeginner

Portainer is a web UI for Docker. Instead of SSH-ing into your server to run docker compose commands, you can see all your containers, start and stop them, edit compose files, and view logs from a browser. If you share your homelab with other household members who aren’t comfortable with the terminal, Portainer makes the day-to-day management accessible.

It’s also genuinely useful for yourself — a visual container list with quick access to logs beats typing container names from memory.

Community vs. Business Edition

Portainer has two editions: Community Edition (CE, free) and Business Edition (BE, paid). CE is fine for homelab use. It has everything you need: container management, compose stacks, volumes, networks, image management, and a basic access control system.

BE adds RBAC, GitOps integrations, and support for Kubernetes and Nomad at scale. None of that matters for a homelab.

This guide uses CE.

Installation

Portainer needs a named volume to persist its data (the configuration, users, and connected endpoints):

docker volume create portainer_data

Then run it:

docker run -d \
  -p 8000:8000 \
  -p 9443:9443 \
  --name portainer \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest

Or using Docker Compose. Create /opt/portainer/docker-compose.yml:

services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    ports:
      - "9443:9443"
      - "8000:8000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
    restart: always

volumes:
  portainer_data:
cd /opt/portainer
docker compose up -d

Access Portainer at https://YOUR_SERVER_IP:9443. It uses a self-signed certificate, so your browser will warn you — accept the exception.

Initial Setup

On first access, Portainer asks you to create an admin account. Do this quickly — there’s a five-minute timeout, after which you have to restart the container to get the setup screen back.

After creating the account, Portainer asks what environment to connect to. Select Get Started to connect to the local Docker environment. You’ll immediately see all your running containers, images, volumes, and networks.

The left sidebar has everything:

Containers — List of all containers, running or stopped. You can start, stop, restart, kill, pause, and remove them from here. Click a container name for details: logs, stats, exec console (run commands inside the container), and inspect the configuration.

Stacks — Portainer’s term for Docker Compose projects. You can deploy new stacks from a compose file, manage existing ones, and update running stacks. This is where most of the useful management happens.

Images — List of all pulled images. Remove unused ones to reclaim disk space.

Volumes — Named and anonymous volumes. See which are in use and which are orphaned.

Networks — Docker networks. Usually you don’t need to touch these directly.

Managing Stacks

The Stacks view is the most useful part of Portainer for a homelab. If you have existing Docker Compose projects running on your server, you can import them into Portainer.

Add existing stack:

If you have a running compose project (started with docker compose up -d outside of Portainer), Portainer may show it as an “orphan stack” or just individual containers. You can add a stack manually by going to Stacks > Add Stack, choosing “Web editor,” pasting your compose YAML, and naming it.

Note: this doesn’t automatically manage your existing compose files — it creates a Portainer-managed version. Decide whether you want Portainer to manage stacks or whether you’ll continue managing them via compose files on disk and just use Portainer for visibility.

Deploy a new stack:

Stacks > Add Stack > Web editor. Paste your compose YAML, fill in any environment variables, and click Deploy. Portainer creates the containers and shows them in the container list.

Container Logs

Click any container name > Logs. You can view live logs, filter them, and download them. Much faster than docker logs container-name when you’re poking around trying to figure out why something isn’t working.

Exec Console

Container > Console > Connect. This opens a terminal inside the running container. Useful for checking configuration, running one-off commands, or debugging. Same as docker exec -it container-name bash but in the browser.

Port 8000

Port 8000 is for the Portainer agent — used when managing remote Docker environments. If you’re only managing the local Docker instance, you don’t need to expose this. You can remove that port mapping from your compose file.

Access Control

If you want other household members to have access without full admin rights, Portainer CE supports teams and users with limited permissions:

Go to Settings > Users to create accounts. This is useful if you want to let a family member restart a service without giving them the ability to reconfigure everything.

Keeping Portainer Updated

Watchtower handles this automatically if you have it running. Or manually:

cd /opt/portainer
docker compose pull
docker compose up -d

Portainer updates frequently. Major version upgrades occasionally require a fresh install, so check the release notes before pulling a new major version.

Is Portainer Necessary?

No. Everything Portainer does, you can do from the command line. If you’re comfortable with docker compose and docker logs, you don’t need it.

But if you find yourself checking container status frequently, or you want a quick visual overview of your homelab, or anyone else in your household needs to interact with services — Portainer earns its place.