Ein Wiki privater Natur

Docker nach docker-compose

Vorarbeiten, wenn man noch das docker run command verfügbar hat

Mein vorhandenes docker run command für wikijs

docker run -d --name=wikijs -e PUID=5004 -e PGID=5005 -e TZ=Europe/Berlin -e "DB_TYPE=postgres" -e "DB_HOST=HOSTIP4" -e "DB_PORT=5432" -e DB_NAME=wikijsdb -e DB_USER=wikijs -e 'DB_PASS=PASSWORT' -p 2123:2123 -v /docker/wikijs/config:/config -v /docker/wikijs/data:/data --restart unless-stopped linuxserver/wikijs:latest
Ergibt dann mit dem online dienst https://www.composerize.com/

name: <your project name>
services:
    wikijs:
        container_name: wikijs
        environment:
            - PUID=5004
            - PGID=5005
            - TZ=Europe/Berlin
            - DB_TYPE=postgres
            - DB_HOST=HOSTIP4
            - DB_PORT=5432
            - DB_NAME=wikijsdb
            - DB_USER=wikijs
            - DB_PASS=PASSWORT
        ports:
            - 2999:2999
        volumes:
            - /docker/wikijs/config:/config
            - /docker/wikijs/data:/data
        restart: unless-stopped
        image: linuxserver/wikijs:latest

Ich habe die Datei in ein Directory wikijs als docker-compose.yml gelegt.
Nun mit docker commit wikijs backup-wikijs
eine akuelle sicherung des containers anfertigen
und mit docker stop wikijs den laufenden Container stoppen
und umbenennen.
docker rename wikijs wikijs_letztes_mit_docker_run
Das stellt sicher, dass es keine namens Konflikte mit dem docker-compose gibt.

Nun kann ein erster Start erfolgen:
docker-compose up -d
das "-d" führt detached aus.

docker-compose logs -f
Wenn dann keine Fehlermeldungen kommen, ok.
Bei Fehlermeldungen wie z.B. bei mir:

Database Initialization Error: no pg_hba.conf entry for host "172.19.0.2", user "wikijs", database "wikijsdb", SSL off
In einer weiteren Terminal Sitzung mit einem Editor die Datei /etc/postgresql/13/main/pg_hba.conf
öffnen und die IP Adresse auswechseln. Vermutlich, weil der alte container nur gestopt wurde und nicht gelöscht wurde, ist eine neue IP Adresse für das docker-compose wikkijs verwendet worden.
Nach dem ändern kann mit
service postgresql reload
Die Datenbank veranlasst werden die Konfiguration neu zu laden.
In dem laufenden docker-compose logs -f wird nun in sehr kurzer Zeit auftauchen, dass der Datanbank Zugriff nun funktioniert und wikijs gestartet sein.

Aufräumarbeiten

mit docker ps -a|grep wikijs gucken, was da noch so an Altlasten rumliegen

5cc5dd4ac900   linuxserver/wikijs:latest                    "/init"                  39 minutes ago      Up 39 minutes                    0.0.0.0:2999->2999/tcp, :::2999->2999/tcp, 3000/tcp                              wikijs
b400e43611d5   linuxserver/wikijs:latest                    "/init"                  About an hour ago   Exited (137) 40 minutes ago                                                                                       wikijs_letztes_mit_docker_run
8bdf5d4e3736   linuxserver/wikijs:latest                    "/init"                  About an hour ago   Created                                                                                                           wikij_b
f3d9174c7df0   e60a0355404b                                 "/init"                  4 weeks ago         Exited (137) About an hour ago                                                                                    wikijs_2a
e44dd19ba910   22bb0cf1c31d                                 "/init"                  7 months ago        Exited (255) 4 weeks ago         0.0.0.0:2999->2999/tcp, 3000/tcp                                                 wikijs_a
99fdecaa2025   22bb0cf1c31d                                 "/init"                  7 months ago        Exited (137) 7 months ago                                                                                         wikijsAlt2
44f5a20c95c6   fd6a9621ac7a                                 "/init"                  8 months ago        Exited (137) 7 months ago                            

Die Container die nicht mehr gebraucht werden, mit z.B.
docker container rm 44f5a20c95c6
usw.
Das sollte ohne --force klappen, wenn nicht, nochmal genauer gucken!
Jetzt sollte alles erledigt sein und wikijs nun nur noch mit docker.compose gemanaget
werden.


Vorarbeiten wenn man kein docker run command mehr hat

Ich verwende ein python Script, dass aus dem laufenden Container eine docker-compose erzeugt
Überholt, ich nutze https://www.composerize.com/

Installion:
apt install python3-pip

git clone https://github.com/Red5d/docker-autocompose.git
cd docker-autocompose

Jetzt den name des gewünschten Containers finden:
docker ps
Zum Beisiel: Ausgabe verkürzt die ports sind ausgelassen

# docker ps
CONTAINER ID   IMAGE                                        COMMAND                  CREATED          STATUS          NAMES                                                                            NAMES
063e2549116a   linuxserver/heimdall:latest                  "/init"                  14 minutes ago   Up 13 minutes   heimdalllatest
af3e5a608305   4af0c16be4b1                                 "docker-entrypoint.s…"   11 days ago      Up 11 days      mariadb5
f3d9174c7df0   linuxserver/wikijs:latest                    "/init"                  11 days ago      Up 11 days      wikijs2
fb4b484f349d   lscr.io/linuxserver/hishtory-server:latest   "/init"                  6 months ago     Up 11 days      hishtory-server

autocompose.py 063e2549116a >/root/heimdall/docker-compose.yml
Das geht auch mit namen, eindeutiger ist aber die CONTAINER ID

Nachbearbeitung des docker-compose.yml

~~autocompose meint es sehr gut mit dem Auslesen der Environment Daten, da kann und muß einiges weg.
Ich habe einen neuen Ordner /root/heimdall/ angelegt und docker-compose.yml dorthin kopiert.
also ~~

mkdir /root/heimdall/
cp docker-compose.yml /root/heimdall/
cd  /root/heimdall/ 
nano docker-compose.yml

Die folgenden Zeilen aus dem kopierten docker-compose.yml entfernen.
- "PS1=$(whoami)@$(hostname)😒(pwd)\$ " ## führt zu Fehler, brauchen wir eh nicht
"HOME=/root"
- "TERM=xterm"
- "S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0"
- "S6_VERBOSITY=1"
- "S6_STAGE2_HOOK=/docker-mods"
- "VIRTUAL_ENV=/lsiopy"
- "LSIO_FIRST_PARTY=true"
- "S6_BEHAVIOUR_IF_STAGE2_FAILS=2"
hostname: "55c96c9eb376"
org.opencontainers.image.ref.name: "bbecc0b09aac63019487719c0d1e6524c6d312fd"
org.opencontainers.image.revision: "bbecc0b09aac63019487719c0d1e6524c6d312fd"

Zur Kontrolle mal mit docker-compose config die Syntax prüfen

Nun auch gleich den laufenden Container, hier Heimdall stoppen mit
docker heimdall:latest stop

Damit wäre eigentlich alles vorbereitet, allerdings lagen noch masenhaft tote container rum, die den Start behinderten.

Die habe ich so entfernt:

# docker ps -a|grep heimdall
55c96c9eb376   linuxserver/heimdall:latest                  "/init"                  48 minutes ago   Exited (0) 18 minutes ago                                                         heimdalllatest
c97a52a25da3   44557460e02d                                 "/init"                  8 months ago     Exited (0) 59 minutes ago                                                         heimdall-development-version-60faccad
3481a36e25b9   a2ab6a3afea7                                 "/init"                  8 months ago     Exited (0) 8 months ago                                                           heimdall_latest
5fc64435bfc2   4f75c23b5c16                                 "/init"                  8 months ago     Exited (0) 8 months ago                                                           heimdall_dev
5e39d65bf274   7a8cc6e2a554                                 "/init"                  8 months ago     Exited (0) 8 months ago                                                           heimdall2415
ac7425022352   6c4da03d5e62                                 "/init"                  8 months ago     Exited (0) 8 months ago                                                           heimdall
root@isp ~/heimdall # 
# docker container rm 55c96c9eb376 --force
55c96c9eb376
root@isp ~/heimdall # docker container rm c97a52a25da3 --force
c97a52a25da3
# So oft wiederholen bis keine container mehr mit heimdall auftauchen

Nun nochmal die images kontrollieren, das sollte alles mit heimdall Bezug weg sein

# docker image ls
REPOSITORY                            TAG       IMAGE ID       CREATED        SIZE

Docker-compose starten

docker-compose up --detach
Creating heimdalllatest ... (output gelöscht) done 
Attaching to heimdalllatest
heimdalllatest    | [migrations] started
heimdalllatest    | [migrations] 01-nginx-site-confs-default: skipped
heimdalllatest    | [migrations] 02-default-location: skipped
heimdalllatest    | [migrations] done
heimdalllatest    | ───────────────────────────────────────
heimdalllatest    | 
heimdalllatest    |       ██╗     ███████╗██╗ ██████╗
heimdalllatest    |       ██║     ██╔════╝██║██╔═══██╗
heimdalllatest    |       ██║     ███████╗██║██║   ██║
heimdalllatest    |       ██║     ╚════██║██║██║   ██║
heimdalllatest    |       ███████╗███████║██║╚██████╔╝
heimdalllatest    |       ╚══════╝╚══════╝╚═╝ ╚═════╝
heimdalllatest    | 
heimdalllatest    |    Brought to you by linuxserver.io
heimdalllatest    | ───────────────────────────────────────
heimdalllatest    | 
heimdalllatest    | To support LSIO projects visit:
heimdalllatest    | https://www.linuxserver.io/donate/
heimdalllatest    | 
(... Output gelöscht)
heimdalllatest    | [custom-init] No custom files found, skipping...
heimdalllatest    | [ls.io-init] done.


Damit rennt nun der Container, was z.B.
docker-compose heimdalllatest ps
oder
docker-compose heimdalllatest top

bestätigt

Das ist aber bei komplizierteren Container fehlerträchtig.
Sehr gut ist der Onlinedienst
https://www.composerize.com/

Dazu braucht man allerdings ein vollständiges cmdline
docker run Command
Damit erspart man sich das entfernen unnötiger env Variablen


Tipp: bei mariadb ist seit 10.x irgendwas der default, dass die bind-adress auf 17.0.0.1
eingestellt ist.
Klar, man kann in den Container wechseln, nano nach installieren und die bind-address auf 0.0.0.0 setze.
dann ein commit, sost vergist man es evtl. und gut
Es geht aber auch per docker-compose.yml
in dem man die bind-address über den Port definiert

        ports:
            - 0.0.0.0:3307:3306

Kochbuch zum Upgrade

Beispielsweise wikijs

Aufräumen mit lzd

alias lzd='docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -v /.config:/.config/jesseduffield/lazydocker lazyteam/lazydocker'

Abgekürzter, bisher nicht verwendeter Prozess