GuiderUtveckling och driftContainerpanelen Portainer

Hantera containrar med Portainer och Podman utan root

Portainer CE på Debian 13, ett webbgränssnitt för dina containrar och Compose-stackar, i Podman under en egen användare utan root bakom Caddy, med installationssidan låst av en token och inga portar öppna mot internet.

Testad på Portainer CE 2.45.1 LTS med Podman 5.4.2 på Debian 13 (trixie) på en server hos Melonslab Uppdaterad 27 september 2026

Rekommenderad server för guiden

VC-S Micro · 2 vCPU · 8 GB Minne · 250 GB Lagring

Månadsvis, ingen bindningstid 7 dagars öppet köp

90 kr/mån

Beställ nu
På den här sidan

Det här sätter du upp

Portainer är ett webbgränssnitt för containrar. Det visar dina containrar, avbilder, volymer och nätverk, visar deras loggar, startar och stoppar dem, och driftsätter Compose-filer, som Portainer kallar stackar, från en textruta, en uppladdad fil eller ett Git-repo.

Portainer används oftast med Docker, men här körs det i Podman utan root, under en egen användare som heter portainer, och hanterar den användarens containrar via Podmans Docker-kompatibla socket. Med Docker styr den som styr Portainer hela servern, som root. Med en socket utan root får en administratör i Portainer, och varje stack, inte fler rättigheter än användaren portainer har. Portainer skriver att Podman utan root kan fungera men inte stöds officiellt, så allt nedan har testats just så.

Varje steg nedan har körts på en nyinstallerad VC-P Alloy (2 vCPU, 8 GB) hos Melonslab med Debian 13:

  • Portainer CE 2.45.1 LTS startade i Podman utan root, hittade Podman-socketen som sin miljö local och svarade bakom Caddy med ett certifikat från Let's Encrypt, över IPv4 och IPv6. IPv6 testades från själva servern.
  • Administratörskontot gick bara att skapa med installationstoken från Portainers logg, och en ny Portainer utan administratör låste sig själv efter 5 minuter tills den startades om.
  • En stack som driftsattes från webbredigeraren svarade på sitt eget namn över HTTPS och såg varje besökares riktiga adress.
  • Port 8000, 9000 och 9443 var stängda mot internet, och en säkerhetskopia lästes tillbaka till en tom Portainer.
  • Podmans automatiska uppdatering tog Portainer från 2.45.0 till 2.45.1, och allt startade igen av sig självt efter en omstart av servern.

Portainer använde omkring 30 MB minne, och hela servern omkring 550 MB.

Innan du börjar

Du behöver:

  • en server uppsatt som i Podman-guiden, med Caddy igång;
  • brandväggen från steg 4 i säkerhetsguiden. Podman utan root öppnar inte portar förbi ufw som Docker gör, så en port som en stack publicerar förblir stängd tills du tillåter den;
  • A- och AAAA-poster för portainer.example.com, och för app.example.com, appen du driftsätter i steg 5, som pekar på din server.

Exemplen använder portainer.example.com för Portainer och app.example.com för appen. Byt ut dem genomgående.

1. Skapa användaren

Som root:

useradd -m -s /bin/bash portainer
loginctl enable-linger portainer
machinectl shell portainer@

Allt fram till steg 3 körs som portainer. Slå på användarens Podman-socket, som Portainer pratar med, och tjänsten som startar användarens containrar när servern startar:

systemctl --user enable --now podman.socket podman-restart.service

podman-restart.service startar varje container med omstartsregeln always efter en omstart av servern. Stackarna du driftsätter från Portainer behöver den.

2. Beskriv containern

mkdir -p ~/.config/containers/systemd

Skapa ~/.config/containers/systemd/portainer.container:

[Unit]
Description=Portainer
Requires=podman.socket
After=podman.socket

[Container]
ContainerName=portainer
Image=docker.io/portainer/portainer-ce:lts
# Portainer manages this user's containers through its Podman socket.
Volume=%t/podman/podman.sock:/var/run/docker.sock
Volume=portainer-data:/data
# Only Caddy, on this server, can reach Portainer: the port is not open to the internet.
PublishPort=127.0.0.1:8097:9000
AutoUpdate=registry

[Service]
Restart=always

[Install]
WantedBy=default.target

%t är användarens körkatalog, /run/user/ följt av användarens id, där Podman-socketen ligger. Inne i containern hamnar den där Portainer förväntar sig Dockers. Portainers vanliga HTTP-port, 9000, publiceras bara på 127.0.0.1, för Caddy. De två andra portarna publiceras inte alls: 9443 visar samma gränssnitt med ett självsignerat certifikat, och 8000 är till för Edge-agenter på andra servrar, som den här guiden inte använder.

Taggen lts följer Portainers versioner med långtidsstöd. Starta den och slå på den dagliga kontrollen av uppdateringar:

systemctl --user daemon-reload
systemctl --user start portainer
systemctl --user enable --now podman-auto-update.timer

3. Sätt Caddy framför

Gå tillbaka till root med exit, byt till machinectl shell caddy@ och lägg till det här blocket sist i ~/Caddyfile:

portainer.example.com {
    reverse_proxy 127.0.0.1:8097
}

Starta om Caddy med systemctl --user restart caddy. Inom en minut visar https://portainer.example.com sidan New Portainer installation.

4. Skapa administratörskontot

En ny Portainer kan tas över av den som först når den, så Portainer skyddar installationssidan på två sätt. Den skriver en ny installationstoken i sin logg vid varje start, tills ett konto finns, och kontot går inte att skapa utan den. Och om inget konto har skapats inom 5 minuter efter starten låser den sig själv tills den startas om.

Visa token som portainer:

podman logs portainer 2>&1 | grep setup_token
setup_token=0bcc52044f09d245edc160a14da611c58f5599c187b0381148feff1b26a94dbd

Öppna https://portainer.example.com och fyll i:

  • Username: från början admin. Ett eget namn, till exempel anna, är svårare att gissa.
  • Password och Confirm password: minst 12 tecken.
  • Setup token: värdet efter setup_token=.

Välj Create user. Välj Skip på Set up Edge Compute, och Get Started på Welcome to Portainer. Portainer har redan anslutit Podman-socketen: Home visar en miljö, local, som Up, med Podman 5.4.2.

Om sidan visar Your Portainer instance timed out for security purposes startar du om Portainer som portainer med systemctl --user restart portainer. Visa sedan token igen, eftersom den är ny efter varje start, och skapa kontot inom 5 minuter.

5. Driftsätt en stack

Öppna local på Home, sedan Stacks i menyn, och välj Add stack:

  • Ange app som Name och behåll Web editor som Build method.
  • Klistra in Compose-filen nedan i redigeraren. Den kör whoami, en liten webbserver som visar förfrågan den tog emot.
  • Välj Deploy the stack.
services:
  web:
    image: docker.io/traefik/whoami
    restart: always
    ports:
      - "127.0.0.1:8100:80"

Två rader spelar roll för varje stack du driftsätter på det här sättet:

  • 127.0.0.1: före porten håller den till Caddy. Utan det lyssnar porten på alla adresser, och ufw håller den stängd tills du tillåter den.
  • restart: always gör att podman-restart.service startar stacken igen efter en omstart av servern. Den startar bara containrar med always, inte unless-stopped.

Ge sedan appen ett namn. Lägg till det här blocket i ~/Caddyfile som caddy och starta om Caddy:

app.example.com {
    reverse_proxy 127.0.0.1:8100
}

https://app.example.com visar whoamis sida. Besökarens egen adress står på raden X-Forwarded-For, som Caddy skickar vidare.

För att ändra en stack öppnar du den, väljer Editor, ändrar filen och väljer Update the stack. Slå på Re-pull image and redeploy i frågan som följer för att samtidigt hämta nyare avbilder.

Containrarna i varje stack körs som användaren portainer. En stack som monterar en katalog på servern, till exempel /etc, kan bara läsa och ändra det som den användaren kan.

6. Vad Portainer kontaktar

Portainer CE 2.45 har ingen inställning för anonym statistik längre: äldre guider nämner Allow collection of anonymous statistics, som är borttagen, och Portainers egen kod innehåller ingen statistik längre. Portainer gör fortfarande de här förfrågningarna, och ingen av dem skickar data om dina containrar:

  • Servern frågar GitHub efter den senaste versionen av Portainer, för att kunna tala om när en uppdatering finns.
  • Servern hämtar nyheterna som visas på Home från Portainers filserver, och listan under Templates från GitHub när du öppnar den.
  • Din webbläsare laddar bilder till nyheterna och mallarnas logotyper från Portainers filserver.

7. Säkerhetskopiera

Portainers egen säkerhetskopia innehåller användare, miljöer, inställningar och dina stackars Compose-filer. Öppna Settings och gör så här under Back up Portainer:

  • Slå på Password Protect och ange ett Password. Säkerhetskopian innehåller stackarnas miljövariabler och eventuella lösenord till registries, så hoppa inte över det.
  • Välj Download backup. Webbläsaren sparar en fil som heter portainer-backup_ följt av datum och .tar.gz.encrypted.

Förvara filen och lösenordet säkert, utanför servern. För att läsa tillbaka den, på en ny server eller efter att Portainer har startats med en tom volym, väljer du Restore Portainer from backup på första sidan i stället för att skapa ett konto. Välj Select file, ange säkerhetskopians Password och Setup token från loggen, och välj Restore Portainer. Logga sedan in med ett konto från säkerhetskopian.

Säkerhetskopian innehåller inte data i dina stackars volymer. Som portainer listar podman volume ls dem, och podman volume export sparar en av dem till en fil, som i Uptime Kuma-guiden. Stoppa stacken under Stacks först, så att kopian blir hel.

8. Uppdateringar

En gång om dagen kontrollerar Podman om det finns en nyare lts-avbild av Portainer, och startar om den i så fall. Kör podman auto-update --dry-run som portainer för att se vad den skulle göra just nu. Efter en uppdatering, eller varje annan omstart av Portainer, loggar du in igen. Versionen du kör står längst ner i menyn.

Den automatiska uppdateringen gäller Portainer själv. Dina stackars avbilder uppdateras när du driftsätter dem igen med Re-pull image and redeploy, som i steg 5.

Felsökning

Sidan visar att din Portainer har låst sig (timed out). Inget konto skapades inom 5 minuter efter starten. Starta om Portainer med systemctl --user restart portainer som portainer och använd den nya installationstoken.

Installationstoken godtas inte. Portainer startades om efter att du kopierade den, och varje start skapar en ny. Kör kommandot podman logs från steg 4 igen.

En stack körs inte efter en omstart av servern. Dess Compose-fil behöver restart: always, och podman-restart.service måste vara påslagen: som portainer ska systemctl --user is-enabled podman-restart.service visa enabled.

Portainer ber dig logga in igen. Portainer har startats om, av en uppdatering eller en omstart av servern. Det avslutar alla sessioner.

Kör det på din egen server

VC-S Micro

90 kr/mån

vCPU
2
Minne
8 GB
Lagring
250 GB
Trafik
10 TB
Standard
HDD · RAID 10
  • Full root-åtkomst
  • Nativt /64 IPv6
  • RAID-skyddad lagring
  • Malmö, Sverige
  • Månadsvis, ingen bindningstid
  • 7 dagars öppet köp
Alla guider