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?

1 „Gefällt mir“

Hast du den alten Container gestoppt?

docker stop app
docker rm app

2 „Gefällt mir“

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?

1 „Gefällt mir“

/var/run/postgresql existiert nicht.

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

1 „Gefällt mir“

Wie sieht Ihre app.yml aus?

1 „Gefällt mir“
$# 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"
1 „Gefällt mir“

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.

1 „Gefällt mir“

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.

2 „Gefällt mir“

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?

1 „Gefällt mir“

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!

1 „Gefällt mir“

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.

2 „Gefällt mir“

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

Ich glaube, ich habe keine weiteren Ideen mehr.

1 „Gefällt mir“

Vielen, vielen Dank trotzdem!

2 „Gefällt mir“

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

2 „Gefällt mir“
# 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! ====================
1 „Gefällt mir“