Rm: impossibile rimuovere '/var/run/postgresql': Directory non vuota

Dopo aver avuto un disco pieno e non essere riuscito a spostare le mie immagini, ho deciso di cancellare tutto, avviare un nuovo container discourse e utilizzare il backup.

Ho cancellato /var/discourse e ho eseguito docker system prune -a

Quindi ho seguito la guida ufficiale. Ma… qualcosa non va:

./launcher rebuild app
x86_64 arch rilevato.
Assicurazione che il launcher sia aggiornato
Richiesta da origin
Launcher è aggiornato
2.0.20230222-0048: Estrazione da discourse/base
Digest: sha256:XXXX
Stato: Immagine aggiornata per 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 -- : Lettura da stdin
I, [2023-03-04T12:04:27.486188 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2023-03-04T12:04:28.456925 #1]  INFO -- : Generazione delle localizzazioni (potrebbe richiedere del tempo)...
Generazione completata.

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: impossibile rimuovere '/var/run/postgresql': Directory non vuota
I, [2023-03-04T12:04:28.616079 #1]  INFO -- :


FALLITO
--------------------
Pups::ExecError: rm -fr /var/run/postgresql fallito con ritorno #<Process::Status: pid 16 exit 1>
Posizione del fallimento: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec fallito con i parametri "rm -fr /var/run/postgresql"
bootstrap fallito con codice di uscita 1
** FALLITO IL BOOTSTRAP ** si prega di scorrere verso l'alto e cercare messaggi di errore precedenti, potrebbero essercene più di uno.
./discourse-doctor potrebbe aiutare a diagnosticare il problema.

Qualcuno può aiutarmi qui?

Hai fermato il vecchio container?

docker stop app
docker rm app

Beh, mentre sarebbe assolutamente da me, questa volta non è così semplice:

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

Penso che il problema potrebbe essere che ho spostato tutto dalla vecchia posizione predefinita dalle immagini Docker al nuovo posto e ora il Docker di Discourse non è in grado di accedere al filesystem che si aspetta?

/var/run/postgresql non esiste.

Non ho idea del perché non funzioni più. :cry:

Com’è il tuo app.yml?

## questo è il modello di container Docker Discourse tutto in uno e autonomo
##
## Dopo aver apportato modifiche a questo file, DEVI ricostruire
## /var/discourse/launcher rebuild app
##
## FAI *MOLTA* ATTENZIONE QUANDO MODIFICHI!
## I FILE YAML SONO SUPER SUPER SENSIBILI A ERRORI DI SPAZIATURA O ALLINEAMENTO!
## visita http://www.yamllint.com/ per convalidare questo file secondo necessità

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Decommenta queste due righe se desideri aggiungere Lets Encrypt (https)
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"

## quali porte TCP/IP dovrebbe esporre questo container?
## Se vuoi che Discourse condivida una porta con un altro webserver come Apache o nginx,
## vedi https://meta.discourse.org/t/17247 per i dettagli
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`)      ## Inserisci qui il tuo dominio
  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`)      ## Inserisci qui il tuo dominio
  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"

  ## Imposta db_shared_buffers al massimo del 25% della memoria totale.
  ## verrà impostato automaticamente da bootstrap in base alla RAM rilevata, o puoi sovrascriverlo
  #db_shared_buffers: "256MB"

  ## può migliorare le prestazioni di ordinamento, ma aumenta l'utilizzo della memoria per connessione
  #db_work_mem: "40MB"

  ## Quale revisione Git dovrebbe usare questo container? (default: 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

  ## Quante richieste web concorrenti sono supportate? Dipende da memoria e core CPU.
  ## verrà impostato automaticamente da bootstrap in base alle CPU rilevate, o puoi sovrascriverlo
  #UNICORN_WORKERS: 3

  ## TODO: Il nome del dominio a cui risponderà questa istanza di Discourse
  ## Obbligatorio. Discourse non funzionerà con un semplice numero IP.
  DISCOURSE_HOSTNAME: talk.spielleiten.de

  ## Decommenta se vuoi che il container venga avviato con lo stesso
  ## hostname (-h opzione) specificato sopra (default "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Elenco di email separate da virgole che diventeranno amministratori e sviluppatori
  ## alla prima registrazione esempio 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'XXX'

  ## TODO: Il server di posta SMTP utilizzato per convalidare nuovi account e inviare notifiche
  # INDIRIZZO SMTP, nome utente e password sono richiesti
  # ATTENZIONE il carattere '#' nella password SMTP può causare problemi!
[eliminato per motivi di privacy]

  ## L'indirizzo CDN http o https per questa istanza di Discourse (configurato per il pull)
  ## vedi https://meta.discourse.org/t/14857 per i dettagli
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  ## La chiave API di Maxmind per la geolocalizzazione degli indirizzi IP per la ricerca degli indirizzi IP
  ## vedi https://meta.discourse.org/t/-/137387/23 per i dettagli
  DISCOURSE_MAXMIND_LICENSE_KEY: XXX

## Il container Docker è stateless; tutti i dati sono memorizzati in /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## I plugin vanno qui
## vedi https://meta.discourse.org/t/19157 per i dettagli
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Qualsiasi comando personalizzato da eseguire dopo la compilazione
run:
  - exec: echo "Inizio comandi personalizzati"
  ## Se vuoi impostare l'indirizzo email 'Da' per la tua prima registrazione, decommenta e modifica:
  ## Dopo aver ricevuto la prima email di registrazione, ri-commenta la riga. Deve essere eseguita solo una volta.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Fine comandi personalizzati"

Questo ha funzionato finché non ho cambiato daemon.json:

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

Allora è quello il tuo problema. Questo è un problema di Docker, non di Discourse.

La mia ipotesi è che abbia a che fare con i permessi o con il fatto che l’unità non sia presente in qualche modo.

Lo presumo. Ma tutti gli altri servizi in dockers funzionano come previsto! È solo discourse che non tenterà di accedere al nuovo data-root.
Ecco perché speravo di trovare una soluzione qui.

Potresti provare a cambiare i volumi in una posizione diversa da /var/discourse/shared/standalone

Presumo che tu abbia già eliminato /var/discourse/shared?

Ho eseguito un rm -R /var/discourse e ho seguito la guida ufficiale all’installazione come uno dei primi passaggi.

Ci proverò!

Ho provato sia una directory sullo stesso disco sia una cartella in “data-root”, non è cambiato nulla.

Perché il comando rm fallisce? Presumo che questo sia ancora il file system del sistema operativo (a differenza di quanto accade all’interno del container) e che l’operazione funzioni se ripeto il comando nella shell.

Credo che il comando di eliminazione sia all’interno del container che sta costruendo.

Non credo di avere altre idee.

Grazie mille comunque!

Quella directory viene mappata a /var/discourse/shared/standalone/postgres_run nell’host.

# ls -lsa /var/discourse/shared/standalone
totale 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/
totale 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 ..

È questo che ti aspettavi? df mostra spazio abbondante, quindi non è un problema di disco pieno.

# ./discourse-doctor
DISCOURSE DOCTOR Lun 6. Mar 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

Trovato containers/app.yml

==================== IMPOSTAZIONI YML ====================
[eliminato per motivi di privacy]

==================== INFORMAZIONI DOCKER ====================
VERSIONE DOCKER: Docker version 20.10.12, build 20.10.12-0ubuntu2~20.04.1

PROCESSI DOCKER (docker ps -a)

CONTAINER ID   IMMAGINE                                       COMANDO                  CREATO      STATO                  PORTE                                                                      NOMI
f6d3f502384f   cthulhoo/ttrss-fpm-pgsql-static:latest       „/opt/tt-rss/updater…”   4 giorni fa   Up 9 ore               9000/tcp                                                                   ttrss-docker_updater_1
fb0c774b31cb   cthulhoo/ttrss-fpm-pgsql-static:latest       „/docker-entrypoint.…\"   4 giorni fa   Up 9 ore (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 giorni fa   Up 9 ore               9000/tcp                                                                   ttrss-docker_backups_1
c211bc93f368   cthulhoo/ttrss-fpm-pgsql-static:latest       „/bin/sh -c ${SCRIPT…”   4 giorni fa   Up 9 ore               9000/tcp                                                                   ttrss-docker_app_1
4ecb89c6bb9f   postgres:12-alpine                           „docker-entrypoint.s…”   4 giorni fa   Up 9 ore               5432/tcp                                                                   ttrss-docker_db_1
c668703d805d   traefik:latest                               „/entrypoint.sh trae…”   4 giorni fa   Up 9 ore               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 giorni fa   Up 9 ore (healthy)     0.0.0.0:8000->8000/tcp, :::8000->8000/tcp                                  paperless-web
d2fbf8682efb   postgres:13                                  „docker-entrypoint.s…”   4 giorni fa   Up 9 ore               5432/tcp                                                                   paperless-db
8284f03fdcd0   redis:6.0                                    „docker-entrypoint.s…”   4 giorni fa   Up 9 ore               6379/tcp                                                                   paperless-redis
ab29487743b0   tootsuite/mastodon                           „/usr/bin/tini -- no…”   4 giorni fa   Up 9 ore (healthy)     3000/tcp, 4000/tcp                                                         mastodon_streaming_1
a117f5e785f8   tootsuite/mastodon                           „/usr/bin/tini -- bu…”   4 giorni fa   Up 9 ore (healthy)     3000/tcp, 4000/tcp                                                         mastodon_sidekiq_1
5a4a7e99230c   tootsuite/mastodon                           „/usr/bin/tini -- ba…”   4 giorni fa   Up 9 ore (healthy)     3000/tcp, 4000/tcp                                                         mastodon_web_1
5484d4dd39b6   postgres:14-alpine                           „docker-entrypoint.s…”   4 giorni fa   Up 9 ore (healthy)     5432/tcp                                                                   mastodon_db_1
ecb2e7cbdc0b   redis:7-alpine                               „docker-entrypoint.s…”   4 giorni fa   Up 9 ore (healthy)     6379/tcp                                                                   mastodon_redis_1

c211bc93f368   cthulhoo/ttrss-fpm-pgsql-static:latest       „/bin/sh -c ${SCRIPT…”   4 giorni fa   Up 9 ore               9000/tcp                                                                   ttrss-docker_app_1

Il container Discourse è in esecuzione

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

Nessun plugin non ufficiale rilevato.

Vedi https://github.com/discourse/discourse/blob/main/lib/plugin/metadata.rb per l'elenco ufficiale.

========================================
Versione Discourse su talk.spielleiten.de: NON TROVATA
Versione Discourse su localhost: NON TROVATA

==================== INFORMAZIONI MEMORIA ====================
RAM (MB):

              totale    utilizzato      libero     condiviso    buffer       disponibile
Memoria:        7870        2292         141        4207        5436        1101
Swap:           2047         580        1467

==================== CONTROLLO SPAZIO DISCO ====================
---------- Spazio disco OS ----------
File system    Dimensione Usati Dispon. Usati% Montato su
/dev/sda2       109G     68G   36G   66% /
/dev/md0        3,7T    3,1T  581G   85% /mnt/raid

==================== INFORMAZIONI DISCO ====================
Disco /dev/sda: 111,81 GiB, 120034123776 Byte, 234441648 settori
Modello disco: Samsung SSD 840
Unità: settori di 1 * 512 = 512 Byte
Dimensione settore (logico/fisico): 512 Byte / 512 Byte
Dimensione I/O (min/ottimale): 512 Byte / 512 Byte
Tipo etichetta disco: gpt
Identificativo disco: F889FA6C-2FB7-44B6-8CDF-1E6A05B9E33D

Dispositivo       Inizio      Fine   Settori Dimensione Tipo
/dev/sda1         2048   1050623   1048576   512M EFI System
/dev/sda2      1050624 234440703 233390080 111,3G File system Linux

Disco /dev/sdb: 186,32 GiB, 200049647616 Byte, 390721968 settori
Modello disco: SAMSUNG HD200HJ
Unità: settori di 1 * 512 = 512 Byte
Dimensione settore (logico/fisico): 512 Byte / 512 Byte
Dimensione I/O (min/ottimale): 512 Byte / 512 Byte
Tipo etichetta disco: dos
Identificativo disco: 0x13e913e8

Dispositivo    Boot Inizio      Fine   Settori Dimensione Kn Tipo
/dev/sdb1          2048 390721967 390719920 186,3G 83 Linux

Disco /dev/sdc: 1,84 TiB, 2000398934016 Byte, 3907029168 settori
Modello disco: SAMSUNG HD203WI
Unità: settori di 1 * 512 = 512 Byte
Dimensione settore (logico/fisico): 512 Byte / 512 Byte
Dimensione I/O (min/ottimale): 512 Byte / 512 Byte
Tipo etichetta disco: dos
Identificativo disco: 0x00000000

Dispositivo      Boot Inizio       Fine   Settori Dimensione Kn Tipo
/dev/sdc1            63 3907024064 3907024002  1,8T fd Linux RAID Autodetect

Disco /dev/sde: 1,84 TiB, 2000398934016 Byte, 3907029168 settori
Modello disco: SAMSUNG HD203WI
Unità: settori di 1 * 512 = 512 Byte
Dimensione settore (logico/fisico): 512 Byte / 512 Byte
Dimensione I/O (min/ottimale): 512 Byte / 512 Byte
Tipo etichetta disco: dos
Identificativo disco: 0x54cd8732

Dispositivo      Boot Inizio       Fine   Settori Dimensione Kn Tipo
/dev/sde1            63 3907024064 3907024002  1,8T fd Linux RAID Autodetect

Disco /dev/sdd: 1,84 TiB, 2000398934016 Byte, 3907029168 settori
Modello disco: SAMSUNG HD203WI
Unità: settori di 1 * 512 = 512 Byte
Dimensione settore (logico/fisico): 512 Byte / 512 Byte
Dimensione I/O (min/ottimale): 512 Byte / 512 Byte
Tipo etichetta disco: dos
Identificativo disco: 0xd4a5e07f

Dispositivo      Boot Inizio       Fine   Settori Dimensione Kn Tipo
/dev/sdd1            63 3907024064 3907024002  1,8T fd Linux RAID Autodetect

Disco /dev/md0: 3,65 TiB, 4000792182784 Byte, 7814047232 settori
Unità: settori di 1 * 512 = 512 Byte
Dimensione settore (logico/fisico): 512 Byte / 512 Byte
Dimensione I/O (min/ottimale): 65536 Byte / 131072 Byte

==================== FINE INFORMAZIONI DISCO ====================

==================== FATTO! ====================