Rm: kann '/var/run/postgresql' nicht entfernen: Verzeichnis nicht leer

Nachdem ich eine volle Festplatte hatte und meine Bilder nicht verschieben konnte, beschloss ich, alles zu löschen, einen neuen Discourse-Container zu starten und das Backup zu verwenden.

Ich habe /var/discourse gelöscht und docker system prune -a ausgeführt.

Dann habe ich der offiziellen Anleitung gefolgt. Aber… etwas stimmt nicht:

./launcher rebuild app
x86_64 arch erkannt.
Stelle sicher, dass der Launcher auf dem neuesten Stand ist
Anfordern von origin
Launcher ist auf dem neuesten Stand
2.0.20230222-0048: Pulling from discourse/base
Digest: sha256:XXXX
Status: Image ist auf dem neuesten Stand für discourse/base:2.0.20230222-0048
docker.io/discourse/base:2.0.20230222-0048
/usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2023-03-04T12:04:27.482399 #1]  INFO -- : Lesen von stdin
I, [2023-03-04T12:04:27.486188 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2023-03-04T12:04:28.456925 #1]  INFO -- : Generiere Locales (das kann eine Weile dauern)...
Generierung abgeschlossen.

I, [2023-03-04T12:04:28.457319 #1]  INFO -- : > mkdir -p /shared/postgres_run
I, [2023-03-04T12:04:28.581971 #1]  INFO -- :
I, [2023-03-04T12:04:28.583082 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run
I, [2023-03-04T12:04:28.588444 #1]  INFO -- :
I, [2023-03-04T12:04:28.588792 #1]  INFO -- : > chmod 775 /shared/postgres_run
I, [2023-03-04T12:04:28.591995 #1]  INFO -- :
I, [2023-03-04T12:04:28.592147 #1]  INFO -- : > rm -fr /var/run/postgresql
rm: kann '/var/run/postgresql' nicht entfernen: Verzeichnis nicht leer
I, [2023-03-04T12:04:28.616079 #1]  INFO -- :


FEHLGESCHLAGEN
--------------------
Pups::ExecError: rm -fr /var/run/postgresql fehlgeschlagen mit Rückgabe #<Process::Status: pid 16 exit 1>
Ort des Fehlschlags: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec fehlgeschlagen mit den Parametern "rm -fr /var/run/postgresql"
bootstrap fehlgeschlagen mit Exit-Code 1
** BOOTSTRAP FEHLGESCHLAGEN ** Bitte scrolle nach oben und suche nach früheren Fehlermeldungen, es kann mehr als eine geben.
./discourse-doctor kann helfen, das Problem zu diagnostizieren.

Kann mir da jemand helfen?

Hast du den alten Container gestoppt?

docker stop app
docker rm app

Nun, obwohl das ganz nach mir klingen würde, ist es dieses Mal nicht so einfach:

# sudo -s
# cd /var/discourse/
# docker stop app
Error response from daemon: No such container: app
# docker rm app
Error: No such container: app

Ich denke, das Problem könnte sein, dass ich alles vom alten Standardort von Docker-Images an den neuen Ort verschoben habe und nun die Discourse-Docker-Installation nicht mehr auf das erwartete Dateisystem zugreifen kann?

/var/run/postgresql existiert nicht.

Ich habe keine Ahnung, warum das nicht mehr funktioniert. :cry:

Wie sieht Ihre app.yml aus?

$# cat app.yml
## Dies ist die All-in-One, Standalone Discourse Docker Container Vorlage
##
## Nach Änderungen an dieser Datei MÜSSEN Sie neu bauen
## /var/discourse/launcher rebuild app
##
## SEIEN SIE *SEHR* VORSICHTIG BEIM BEARBEITEN!
## YAML-DATEIEN SIND SUPER SUPER EMPFINDLICH GEGENÜBER FEHLERN BEI LEERZEICHEN ODER AUSRICHTUNG!
## Besuchen Sie http://www.yamllint.com/, um diese Datei nach Bedarf zu validieren

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Kommentieren Sie diese beiden Zeilen aus, wenn Sie Lets Encrypt (https) hinzufügen möchten
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"

## Welche TCP/IP-Ports soll dieser Container verfügbar machen?
## Wenn Sie möchten, dass Discourse einen Port mit einem anderen Webserver wie Apache oder nginx teilt,
## siehe https://meta.discourse.org/t/17247 für Details
expose:
#  - "7890:80"   # http
#  - "7891:443" # https

labels:
  app_name: discourse
  traefik.enable: true
  traefik.http.routers.discourse.entrypoints: http
  traefik.http.routers.discourse.rule: Host(`talk.spielleiten.de`)      ## Hier eure Domain eintragen
  traefik.http.middlewares.discourse-https-redirect.redirectscheme.scheme: https
  traefik.http.routers.discourse.middlewares: discourse-https-redirect
  traefik.http.routers.discourse-secure.entrypoints: https
  traefik.http.routers.discourse-secure.rule: Host(`talk.spielleiten.de`)      ## Hier eure Domain eintragen
  traefik.http.routers.discourse-secure.tls: true
  traefik.http.routers.discourse-secure.tls.certresolver: http
  traefik.http.routers.discourse-secure.service: discourse
  traefik.http.services.discourse.loadbalancer.server.port: 80
  traefik.docker.network: proxy

docker_args:
  - "--network=proxy"

networks:
  - proxy

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Setzen Sie db_shared_buffers auf maximal 25% des Gesamtspeichers.
  ## wird automatisch vom Bootstrap basierend auf dem erkannten RAM gesetzt, oder Sie können überschreiben
  #db_shared_buffers: "256MB"

  ## kann die Sortierleistung verbessern, erhöht aber den Speicherverbrauch pro Verbindung
  #db_work_mem: "40MB"

  ## Welche Git-Revision soll dieser Container verwenden? (Standard: tests-passed)
  #version: tests-passed

env:
  LC_ALL: de_DE.UTF-8
  LANG: de_DE.UTF-8
  LANGUAGE: dn_DE.UTF-8
  EMBER_CLI_PROD_ASSETS: 1
  # DISCOURSE_DEFAULT_LOCALE: en

  ## Wie viele gleichzeitige Webanfragen werden unterstützt? Hängt von Speicher und CPU-Kernen ab.
  ## wird automatisch vom Bootstrap basierend auf den erkannten CPUs gesetzt, oder Sie können überschreiben
  #UNICORN_WORKERS: 3

  ## TODO: Der Domainname, auf den diese Discourse-Instanz reagieren wird
  ## Erforderlich. Discourse funktioniert nicht mit einer reinen IP-Nummer.
  DISCOURSE_HOSTNAME: talk.spielleiten.de

  ## Kommentieren Sie aus, wenn der Container mit demselben
  ## Hostnamen (-h Option) wie oben angegeben gestartet werden soll (Standard "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Liste von durch Kommas getrennten E-Mails, die bei der ersten Anmeldung zu Administratoren und Entwicklern gemacht werden
  ## Beispiel 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'XXX'

  ## TODO: Der SMTP-Mailserver, der zum Validieren neuer Konten und zum Senden von Benachrichtigungen verwendet wird
  # SMTP-ADRESSE, Benutzername und Passwort sind erforderlich
  # ACHTUNG: Das Zeichen '#' im SMTP-Passwort kann Probleme verursachen!
[private for privacy reasons]

  ## Die HTTP- oder HTTPS-CDN-Adresse für diese Discourse-Instanz (konfiguriert zum Ziehen)
  ## siehe https://meta.discourse.org/t/14857 für Details
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  ## Der Maxmind Geolocation IP-Adressschlüssel für die IP-Adressensuche
  ## siehe https://meta.discourse.org/t/-/137387/23 für Details
  DISCOURSE_MAXMIND_LICENSE_KEY: XXX

## Der Docker-Container ist zustandslos; alle Daten werden in /shared gespeichert
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Plugins kommen hierher
## siehe https://meta.discourse.org/t/19157 für Details
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Alle benutzerdefinierten Befehle, die nach dem Erstellen ausgeführt werden sollen
run:
  - exec: echo "Beginn der benutzerdefinierten Befehle"
  ## Wenn Sie die Absender-E-Mail-Adresse für Ihre erste Registrierung festlegen möchten, kommentieren Sie sie aus und ändern Sie sie:
  ## Nachdem Sie die erste Registrierungs-E-Mail erhalten haben, kommentieren Sie die Zeile wieder aus. Sie muss nur einmal ausgeführt werden.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Ende der benutzerdefinierten Befehle"

Dies funktionierte, bis ich daemon.json geändert habe:

"data-root": "/srv/new-drive/new-docker-root"

Dann ist das dein Problem. Das ist ein Docker-Problem, kein Discourse-Problem.

Meine Vermutung ist, dass es mit Berechtigungen oder dem Laufwerk zusammenhängt, das irgendwie nicht vorhanden ist.

Ich nehme es an. Aber alle anderen Dienste in Dockers funktionieren wie erwartet! Nur Discourse versucht nicht, auf das neue data-root zuzugreifen. Deshalb hoffte ich, hier eine Lösung zu finden.

Sie könnten versuchen, die Volumes an einen anderen Ort als /var/discourse/shared/standalone zu ändern.

Ich nehme an, Sie haben /var/discourse/shared bereits gelöscht?

Ich habe ein rm -R /var/discourse ausgeführt und bin dabei als einer der ersten Schritte der offiziellen Installationsanleitung gefolgt.

Das werde ich versuchen!

Ich habe sowohl ein Verzeichnis auf derselben Festplatte als auch einen Ordner in “data-root” ausprobiert - nichts hat sich geändert.

Warum schlägt der rm-Befehl fehl? Ich gehe davon aus, dass dies immer noch das Dateisystem des Betriebssystems ist (im Gegensatz zu dem im Container) - und diese Operation funktioniert, wenn ich den Befehl in der Shell wiederhole.

Ich glaube, dass der Löschbefehl innerhalb des Containers ausgeführt wird, den er erstellt.

Ich glaube, ich habe keine weiteren Ideen mehr.

Vielen, vielen Dank trotzdem!

Dieses Verzeichnis wird auf /var/discourse/shared/standalone/postgres_run auf dem Host abgebildet.

# ls -lsa /var/discourse/shared/standalone
insgesamt 16
4 drwxr-xr-x 4 root            root             4096 Mär  6 08:34 .
4 drwxr-xr-x 3 root            root             4096 Mär  6 08:34 ..
4 drwxr-xr-x 3 root            root             4096 Mär  6 08:34 log
4 drwxrwxr-x 2 systemd-resolve systemd-timesync 4096 Mär  6 08:34 postgres_run
# ls -lsa /var/discourse/shared/standalone/postgres_run/
insgesamt 8
4 drwxrwxr-x 2 systemd-resolve systemd-timesync 4096 Mär  6 08:34 .
4 drwxr-xr-x 4 root            root             4096 Mär  6 08:34 ..

Ist das zu erwarten? df zeigt ausreichend Speicherplatz an, es handelt sich also nicht um ein volles Laufwerksproblem.

# ./discourse-doctor
DISCOURSE DOCTOR Mo 6. Mär 18:54:01 CET 2023
OS: Linux dracula 5.4.0-139-generic #156-Ubuntu SMP Fri Jan 20 17:27:18 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

Gefunden containers/app.yml

==================== YML SETTINGS ====================
[aus Datenschutzgründen gelöscht]

==================== DOCKER INFO ====================
DOCKER VERSION: Docker version 20.10.12, build 20.10.12-0ubuntu2~20.04.1

DOCKER PROCESSES (docker ps -a)

CONTAINER ID   IMAGE                                        COMMAND                  CREATED      STATUS                 PORTS                                                                      NAMES
f6d3f502384f   cthulhoo/ttrss-fpm-pgsql-static:latest       “/opt/tt-rss/updater…”   4 Tage ago   Up 9 Stunden           9000/tcp                                                                   ttrss-docker_updater_1
fb0c774b31cb   cthulhoo/ttrss-fpm-pgsql-static:latest       “/docker-entrypoint.…\"   4 Tage ago   Up 9 Stunden (healthy)   127.0.0.1:8280->80/tcp                                                     ttrss-docker_web-nginx_1
83a32795b305   cthulhoo/ttrss-fpm-pgsql-static:latest       “/opt/tt-rss/dcron.s…”   4 Tage ago   Up 9 Stunden           9000/tcp                                                                   ttrss-docker_backups_1
c211bc93f368   cthulhoo/ttrss-fpm-pgsql-static:latest       “/bin/sh -c ${SCRIPT…”   4 Tage ago   Up 9 Stunden           9000/tcp                                                                   ttrss-docker_app_1
4ecb89c6bb9f   postgres:12-alpine                           “docker-entrypoint.s…”   4 Tage ago   Up 9 Stunden           5432/tcp                                                                   ttrss-docker_db_1
c668703d805d   traefik:latest                               “/entrypoint.sh trae…”   4 Tage ago   Up 9 Stunden           0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   traefik
f67a63243f13   ghcr.io/paperless-ngx/paperless-ngx:latest   “/sbin/docker-entryp…”   4 Tage ago   Up 9 Stunden (healthy)   0.0.0.0:8000->8000/tcp, :::8000->8000/tcp                                  paperless-web
d2fbf8682efb   postgres:13                                  “docker-entrypoint.s…”   4 Tage ago   Up 9 Stunden           5432/tcp                                                                   paperless-db
8284f03fdcd0   redis:6.0                                    “docker-entrypoint.s…”   4 Tage ago   Up 9 Stunden           6379/tcp                                                                   paperless-redis
ab29487743b0   tootsuite/mastodon                           “/usr/bin/tini -- no…”   4 Tage ago   Up 9 Stunden (healthy)   3000/tcp, 4000/tcp                                                         mastodon_streaming_1
a117f5e785f8   tootsuite/mastodon                           “/usr/bin/tini -- bu…”   4 Tage ago   Up 9 Stunden (healthy)   3000/tcp, 4000/tcp                                                         mastodon_sidekiq_1
5a4a7e99230c   tootsuite/mastodon                           “/usr/bin/tini -- ba…”   4 Tage ago   Up 9 Stunden (healthy)   3000/tcp, 4000/tcp                                                         mastodon_web_1
5484d4dd39b6   postgres:14-alpine                           “docker-entrypoint.s…”   4 Tage ago   Up 9 Stunden (healthy)   5432/tcp                                                                   mastodon_db_1
ecb2e7cbdc0b   redis:7-alpine                               “docker-entrypoint.s…”   4 Tage ago   Up 9 Stunden (healthy)   6379/tcp                                                                   mastodon_redis_1

c211bc93f368   cthulhoo/ttrss-fpm-pgsql-static:latest       “/bin/sh -c ${SCRIPT…”   4 Tage ago   Up 9 Stunden           9000/tcp                                                                   ttrss-docker_app_1

Discourse Container App läuft

==================== PLUGINS ===================
          - git clone https://github.com/discourse/docker_manager.git

Keine nicht-offiziellen Plugins erkannt.

Siehe https://github.com/discourse/discourse/blob/main/lib/plugin/metadata.rb für die offizielle Liste.

========================================
Discourse-Version unter talk.spielleiten.de: NICHT GEFUNDEN
Discourse-Version unter localhost: NICHT GEFUNDEN

==================== SPEICHERINFORMATIONEN ====================
RAM (MB):

              gesamt      belegt       frei     gemeinsam    Zwischen   verfügbar
Speicher:        7870        2292         141        4207        5436        1101
Auslager:        2047         580        1467

==================== FESTPLATTENSPEICHERPRÜFUNG ====================
---------- OS Festplattenspeicher ----------
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/sda2       109G     68G   36G   66% /
/dev/md0        3,7T    3,1T  581G   85% /mnt/raid

==================== FESTPLATTENINFORMATIONEN ====================
Festplatte /dev/sda: 111,81 GiB, 120034123776 Bytes, 234441648 Sektoren
Festplattenmodell: Samsung SSD 840
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: gpt
Festplattenbezeichner: F889FA6C-2FB7-44B6-8CDF-1E6A05B9E33D

Gerät       Anfang      Ende  Sektoren  Größe Typ
/dev/sda1     2048   1050623   1048576   512M EFI-System
/dev/sda2  1050624 234440703 233390080 111,3G Linux-Dateisystem

Festplatte /dev/sdb: 186,32 GiB, 200049647616 Bytes, 390721968 Sektoren
Festplattenmodell: SAMSUNG HD200HJ
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: dos
Festplattenbezeichner: 0x13e913e8

Gerät      Boot Anfang      Ende  Sektoren  Größe Kn Typ
/dev/sdb1         2048 390721967 390719920 186,3G 83 Linux

Festplatte /dev/sdc: 1,84 TiB, 2000398934016 Bytes, 3907029168 Sektoren
Festplattenmodell: SAMSUNG HD203WI
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: dos
Festplattenbezeichner: 0x00000000

Gerät      Boot Anfang       Ende   Sektoren Größe Kn Typ
/dev/sdc1           63 3907024064 3907024002  1,8T fd Linux RAID-Autoerkennung

Festplatte /dev/sde: 1,84 TiB, 2000398934016 Bytes, 3907029168 Sektoren
Festplattenmodell: SAMSUNG HD203WI
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: dos
Festplattenbezeichner: 0x54cd8732

Gerät      Boot Anfang       Ende   Sektoren Größe Kn Typ
/dev/sde1           63 3907024064 3907024002  1,8T fd Linux RAID-Autoerkennung

Festplatte /dev/sdd: 1,84 TiB, 2000398934016 Bytes, 3907029168 Sektoren
Festplattenmodell: SAMSUNG HD203WI
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: dos
Festplattenbezeichner: 0xd4a5e07f

Gerät      Boot Anfang       Ende   Sektoren Größe Kn Typ
/dev/sdd1           63 3907024064 3907024002  1,8T fd Linux RAID-Autoerkennung

Festplatte /dev/md0: 3,65 TiB, 4000792182784 Bytes, 7814047232 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 65536 Bytes / 131072 Bytes

==================== ENDE FESTPLATTENINFORMATIONEN ====================

==================== FERTIG! ====================