Docker und Portainer im Proxmox LXC installieren

Moin!

In diesem Beitrag berichte ich über die Installation eines kompletten Docker Stack inklusive Docker compose und Portainer in einem LXC Container.

Mit Portainer ist der User in der Lage, viele Administrationsaufgaben bequem über ein Web UI erledigen zu können. Container, Netzwerke und Volumen können erstellt, entfernt und administriert werden. Ganze Docker Stacks werden bequem per Webeditor erstellt und administriert.

Um eine möglichst reibungsfreie Umsetzung des Beitrags zu ermöglichen, ist es sinnvoll, meinen Beitrag zum Thema „Proxmox LXC Container konfigurieren“ zu lesen und umzusetzen.

Zunächst verbinden wir uns per SSH mit dem „root“ User auf dem Container. Im Anschluss führen wir ein Update durch und installieren die benötigten Pakete.

apt update && apt upgrade -y && apt install ca-certificates curl gnupg lsb-release -y

Um Docker nun installieren zu können, pflegen wir das offizielle Docker Repository ein. Dies birgt den großen Vorteil der Unabhängigkeit zum Distributions Repository. Im Regelfall ist in dem Distributions Repository immer eine ältere Version verfügbar. So erhalten wir stets die neueste Paketversion. Zunächst laden wir den Sicherungsschlüssel herunter und erstellen eine source Datei.

curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

Damit wir keine alten Paketleichen auf dem System haben, deinstallieren wir zunächst möglicherweise vorhandene Docker-Pakete.

apt purge docker docker.io containerd runc -y

Nun aktualisieren wir die Paketlisten und installieren Docker, samt nötigen Plugins wie z.B. „docker compose“.

apt update && apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

Kommandos wie „docker compose“ benötigen eine gewisse Kombination an Berechtigung auf dem System. Die Vergabe dieser Berechtigungen kann durch die Funktion der Vererbung innerhalb von Gruppen umgesetzt werden. Wird ein Mitglied einer Gruppe hinzugefügt, erhält dieses durch die Vererbung automatisch alle Berechtigung, die der Gruppe zugeteilt wurden. Wir fügen also unseren Nutzer, der zukünftig die Container starten soll, der Gruppe „docker“ hinzu. Ich empfehle hierfür den User, den Ihr in meinem letzten Beitrag angelegt habt, dafür zu verwenden.

adduser username
usermod -aG docker username

Nachdem der User die entsprechende Berechtigung erhalten hat, loggen wir uns auf diesen ein und wechseln in sein Nutzerverzeichnis. Ich empfehle für jede Applikation, die in Form eines Containers auf eurem System ausgeführt werden soll, einen eigenen Ordner anzulegen. Wir legen folglich einen neuen Ordner für Portainer an und springen genau in diesen.

su username
cd /home/username/
mkdir portainer && cd portainer/

Im Ordner „portainer“ angekommen, erstellen wir zunächst ein „compose file“. In diesem wird die Konfiguration und Definition des jeweiligen Containers hinterlegt. Parameter wie das Netzwerkdesign, die Storage Volumen und das Basisimage für den zukünftigen Container sind hier zu finden. Je nach Container können auch komplette Umgebungen konfiguriert werden.

nano compose.yml
services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer-ce
    restart: unless-stopped
    ports:
      - 9000:9000
      - 8000:8000
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data:/data

Jetzt pullen wir das Image und bringen den Container an den Start.

docker compose up -d

Nun wird der Container aus den Parameterangaben und dem Basisimage gebaut. Sobald dieser Vorgang abgeschlossen ist, könnt ihr im Browser das Web UI von Portainer ansteuern. Sofern ihr das Netzwerkdesign nicht angepasst, findet ihr das Web UI unter „IP-Adresse:8000“. Beim erstmaligen Aufrufen des Web UI werdet ihr aufgefordert, einen Administrator-Account anzulegen. Ist dies geschafft, kann der Host auch schon bequem mit Portainer verwaltet werden.

Grüße gehen aus dem Archiv!

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

18 Kommentare zu „Docker und Portainer im Proxmox LXC installieren“

  1. Hallo zusammen,
    eigentlich ist das eine sehr gute Anleitung, jedoch bekomme ich Docker / Portainer nicht zum laufen (leider ist die Anleitung nicht „dummy save“ 🙂
    Wäre es möglich, auch die zwischenschritte zu beschreiben?
    z.B. bei nano, wo der zusätzliche Text rein kommt, und wie genau gespeichert wird. Wie der user wechsel gemacht wird usw.

    Schönen Gruß aus Bayern

    Tobi H.

    1. Moin Tobias!

      Freut mich das dir der Beitrag gefällt! 🙂
      Ich schaue mal die Tage ob ich das noch irgendwie unter bekomme, leider habe ich momentan viel zu tun.
      Versprechen kann ich aber nichts 😉

      Grüße Lucas

  2. Hallo,

    leider bekomme ich den docker mit dem Debian 11 Template im Proxmox nicht zum laufen. Hier scheint es einen Konflikt zu geben denn der Fehler wird auch auf GitHub bereits gemeldet.
    Process: 11481 ExecStart=/usr/bin/dockerd -H fd:// –containerd=/run/containerd/containerd.sock (code=exited, status=1/FAILURE)
    Main PID: 11481 (code=exited, status=1/FAILURE)

    Habe das Netzt bereits durchsucht, scheint aber noch keiner eine wirkliche Lösung zu haben. Ein VPN wie es in einigen Post geschrieben wird habe ich nicht am laufen.

    1. Hallo Schiemi,

      ich habe das Problem bereits gelöst nur bin ich noch nicht dazu gekommen die Lösung zu „Papier“ zu bringen.
      Ich werde entweder den Beitrag aktualisieren oder einen neuen Beitrag verfassen, da das Problem nur von temporärer Natur sein wird.

  3. Moin Lucas,

    vielen Dank fuer Deinen Blog, ich hab ihn letztes Jahr genutzt, um Bitwarden und einige andere Dienste in einem LXC zum Laufen zu bringen.
    Seit dem letzten Update+Reboot gehen leider die Docker LXCs nicht mehr, hast du dafuer eine Idee oder schon eine Loesung?
    Geht nicht mehr = Die LXCs sind zwar aktiv, allerdings sind sie wie leergefegt, kein Docker drin, keine Dienste, als waeren sie ausgebrannt.
    Ich habe diese Frage auch im Proxmox Forum gepostet:
    https://forum.proxmox.com/threads/docker-in-lxc-l%C3%A4uft-nicht-mehr.83651/page-2#post-447410

    1. Hallo Eike,

      freut mich das dir der Blog bereits helfen konnte.
      Das Problem ist aktuell das die Docker Version in dem Debian 11 Repo für LXC Container nicht ohne weiteres nutzbar ist.
      Ich habe aktuell das Problem bereits gelöst, bin allerdings noch nicht dazu gekommen diese Lösung zu Papier zu bringen.
      Hab noch etwas Gedult. Ich werde versuchen die Lösung diesen Sonntag nieder zuschreiben. Entweder als neuer Beitrag oder
      in diesem Beitrag. Mal schauen 🙂

      1. Oh wow, das wuerde mich brennend interessieren.

        EDIT
        Also meine wichtigsten Container mit Bitwarden (Ubuntu 20.04) konnte ich reanimieren, indem ich einfach ein apt update && apt upgrade gemacht habe. Wundert mich dass ich da noch nicht frueher drauf gekommen bin.
        Bei einem anderen LXC ging das leider nicht so einfach (Debian 10), dafuer warte ich dann auf deinen Beitrag.

        Gruss und danke Dir im Voraus
        Eike

        1. Ok, in meinem Fall haben ein Update des Containers, sowie Docker im Container geholfen.
          Bin gespannt auf weitere Eintraege, ich schaue immer gerne hier vorbei.
          Gruss Eike

  4. Hallo Lucas,

    schöne Anleitung, danke dafür.
    Bei mir kam es bei der Ausführung „docker-compose“ zu dem Fehler:
    "PermissionError: [Errno 13] Permission denied"
    Die Lösung ist, den Benutzer in die Gruppe „docker“ hinzufügen, dann klappt es auch 🙂

    LG Jacek

    1. Hallo,

      Gerne, freut mich das ich dir helfen konnte 🙂
      Die Zuweisung in die Docker Gruppe ist aber nur erforderlich, wenn der Docker Container nicht vom root User ausgeführt werden soll.
      Dies kann man empfehlen, wenn der Container aus dem Internet erreichbar ist. Ich werde nichts desto trotz darüber nachdenken es in die Tutorials aufzunehmen. Allerdings müssen dann noch weitere Vorkehrungen getroffen werden.

  5. Prima Anleitung bis hierhin. Beim Ausführen des Befehls „docker compose up -d“ erhalte ich leider folgenden Fehler:

    Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting „proc“ to rootfs at „/proc“: mount proc:/proc (via /proc/self/fd/6), flags: 0xe: permission denied: unknown

        1. Was sagt die Ausgabe vom journalctl und daemon.log? Welches OS, auf welcher Version, verwendest du? Welche Docker Version ist installiert?
          Um dich bei Troubleshooting zu unterstützen, benötige ich ein paar mehr Informationen.

          1. Ich habe eben noch einmal alles Schritt für Schritt wiederholt, und siehe da … alles funktioniert!

            Entschuldigung für die Mühen! Jetzt ist alles tippitoppi. 🙂

            Vielen Dank für die sehr gute Anleitung!

  6. Hallo Lucas,

    vielen Dank für deinen Beitrag,. Ich habe genauso wie von Dir beschrieben alles gemacht, bekomme aber leider den gleichen Fehler den auch Christoph hatte.

    Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting „proc“ to rootfs at „/proc“: mount proc:/proc (via /proc/self/fd/6), flags: 0xe: permission denied: unknown

    Auch nach mehrmaligem nochmal genau nach deiner Anleitung durcharbeiten kommt der selbe Fehler.
    Wonach muss ich in der journalctl und daemon.log suchen ? Bin Newbie in Linux.

    Gruß
    Hasan

    1. Hallo Lucas, Danke für die Antwort. Habe von null an nochmal alles gemacht, diesmal mit Haken bei „nesting“ und siehe da … funktioniert 🙂

      Gruß
      Hasan

Nach oben scrollen