Rm : impossible de supprimer '/var/run/postgresql' : le répertoire n'est pas vide

Après avoir eu un disque plein et sans pouvoir déplacer mes images, j’ai décidé de tout supprimer, de créer un nouveau conteneur discourse et d’utiliser la sauvegarde.

J’ai supprimé /var/discourse et fait un docker system prune -a.

Ensuite, j’ai suivi le guide officiel. Mais… quelque chose ne va pas :

./launcher rebuild app
x86_64 arch detected.
Ensuring launcher is up to date
Demande à partir d'origin
Launcher est à jour
2.0.20230222-0048: Pulling from discourse/base
Digest: sha256:XXXX
Status: Image is up to date for 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 -- : Reading from stdin
I, [2023-03-04T12:04:27.486188 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2023-03-04T12:04:28.456925 #1]  INFO -- : Generating locales (this might take a while)...
Generation complete.

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: cannot remove '/var/run/postgresql': Directory not empty
I, [2023-03-04T12:04:28.616079 #1]  INFO -- :


FAILED
--------------------
Pups::ExecError: rm -fr /var/run/postgresql failed with return #<Process::Status: pid 16 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params "rm -fr /var/run/postgresql"
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.

Quelqu’un peut-il m’aider là-dessus ?

1 « J'aime »

Avez-vous arrêté l’ancien conteneur ?

docker stop app
docker rm app

2 « J'aime »

Eh bien, bien que cela me ressemble tout à fait, cette fois, ce n’est pas si simple :

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

Je pense que le problème pourrait être que j’ai déplacé tout de l’ancien emplacement par défaut des images Docker vers le nouvel endroit et que maintenant le conteneur Docker Discourse n’est pas en mesure d’accéder au système de fichiers attendu ?

1 « J'aime »

/var/run/postgresql n’existe pas.

Je n’ai aucune idée pourquoi ça ne fonctionne plus. :cry:

1 « J'aime »

À quoi ressemble votre app.yml ?

1 « J'aime »
$# cat app.yml
## C'est le modèle de conteneur Docker Discourse tout-en-un et autonome
##
## Après avoir apporté des modifications à ce fichier, vous DEVEZ reconstruire
## /var/discourse/launcher rebuild app
##
## SOYEZ *TRÈS* PRUDENT LORS DE L'ÉDITION !
## LES FICHIERS YAML SONT EXTRÊMEMENT SENSIBLES AUX ERREURS D'ESPACEMENT OU D'ALIGNEMENT !
## visitez http://www.yamllint.com/ pour valider ce fichier si nécessaire

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Décommentez ces deux lignes si vous souhaitez ajouter Lets Encrypt (https)
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"

## quels ports TCP/IP ce conteneur doit-il exposer ?
## Si vous souhaitez que Discourse partage un port avec un autre serveur web comme Apache ou nginx,
## voir https://meta.discourse.org/t/17247 pour plus de détails
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`)      ## Entrez votre domaine ici
  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`)      ## Entrez votre domaine ici
  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"

  ## Définir db_shared_buffers à un maximum de 25% de la mémoire totale.
  ## sera défini automatiquement par bootstrap en fonction de la RAM détectée, ou vous pouvez le remplacer
  #db_shared_buffers: "256MB"

  ## peut améliorer les performances de tri, mais augmente l'utilisation de la mémoire par connexion
  #db_work_mem: "40MB"

  ## Quelle révision Git ce conteneur doit-il utiliser ? (défaut : 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

  ## Combien de requêtes web concurrentes sont prises en charge ? Dépend de la mémoire et des cœurs CPU.
  ## sera défini automatiquement par bootstrap en fonction des CPU détectés, ou vous pouvez le remplacer
  #UNICORN_WORKERS: 3

  ## TODO : Le nom de domaine auquel cette instance Discourse répondra
  ## Obligatoire. Discourse ne fonctionnera pas avec un simple numéro IP.
  DISCOURSE_HOSTNAME: talk.spielleiten.de

  ## Décommentez si vous souhaitez que le conteneur soit démarré avec le même
  ## nom d'hôte (-h option) que celui spécifié ci-dessus (par défaut "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO : Liste d'e-mails séparés par des virgules qui seront rendus administrateurs et développeurs
  ## lors de la première inscription, par exemple 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'XXX'

  ## TODO : Le serveur de messagerie SMTP utilisé pour valider les nouveaux comptes et envoyer des notifications
  # L'ADRESSE SMTP, le nom d'utilisateur et le mot de passe sont requis
  # ATTENTION, le caractère '#' dans le mot de passe SMTP peut causer des problèmes !
[supprimé pour des raisons de confidentialité]

  ## L'adresse CDN http ou https pour cette instance Discourse (configurée pour tirer)
  ## voir https://meta.discourse.org/t/14857 pour plus de détails
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  ## La clé de licence du serveur Maxmind pour la recherche d'adresses IP
  ## voir https://meta.discourse.org/t/-/137387/23 pour plus de détails
  DISCOURSE_MAXMIND_LICENSE_KEY: XXX

## Le conteneur Docker est sans état ; toutes les données sont stockées dans /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Les plugins vont ici
## voir https://meta.discourse.org/t/19157 pour plus de détails
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Toutes les commandes personnalisées à exécuter après la construction
run:
  - exec: echo "Début des commandes personnalisées"
  ## Si vous souhaitez définir l'adresse e-mail 'De' pour votre première inscription, décommentez et modifiez :
  ## Après avoir reçu le premier e-mail d'inscription, commentez à nouveau la ligne. Elle ne doit s'exécuter qu'une seule fois.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Fin des commandes personnalisées"

Cela a fonctionné jusqu’à ce que je modifie daemon.json :

"data-root": "/srv/new-drive/new-docker-root"
1 « J'aime »

Alors c’est votre problème. C’est un problème de docker, pas un problème de Discourse.

Je suppose que cela a à voir avec les autorisations ou le fait que le lecteur n’est pas là d’une manière ou d’une autre.

1 « J'aime »

Je suppose. Mais tous les autres services dans dockers fonctionnent comme prévu ! C’est juste discourse qui n’essaie pas d’accéder au nouveau data-root.
C’est pourquoi j’espérais trouver une solution ici.

2 « J'aime »

Vous pourriez essayer de changer les volumes pour qu’ils se trouvent ailleurs que dans /var/discourse/shared/standalone

Je suppose que vous avez déjà supprimé /var/discourse/shared ?

1 « J'aime »

J’ai fait un rm -R /var/discourse et j’ai suivi le guide d’installation officiel comme l’une des premières étapes.

J’essaierai ça !

1 « J'aime »

J’ai essayé un répertoire sur le même disque ainsi qu’un dossier dans « data-root » - rien n’a changé.

Pourquoi la commande rm échoue-t-elle ? Je suppose qu’il s’agit toujours du système de fichiers du système d’exploitation (par opposition à l’intérieur du conteneur) - et que cette opération fonctionne si je répète la commande dans le shell.

2 « J'aime »

Je pense que cette commande de suppression se trouve à l’intérieur du conteneur qu’il est en train de construire.

Je n’ai plus d’idées.

1 « J'aime »

Merci beaucoup, vraiment !

2 « J'aime »

Ce répertoire est mappé à /var/discourse/shared/standalone/postgres_run sur l’hôte.

2 « J'aime »
# ls -lsa /var/discourse/shared/standalone
total 16
4 drwxr-xr-x 4 root            root             4096 Mar  6 08:34 .
4 drwxr-xr-x 3 root            root             4096 Mar  6 08:34 ..
4 drwxr-xr-x 3 root            root             4096 Mar  6 08:34 log
4 drwxrwxr-x 2 systemd-resolve systemd-timesync 4096 Mar  6 08:34 postgres_run
# ls -lsa /var/discourse/shared/standalone/postgres_run/
total 8
4 drwxrwxr-x 2 systemd-resolve systemd-timesync 4096 Mar  6 08:34 .
4 drwxr-xr-x 4 root            root             4096 Mar  6 08:34 ..

Est-ce que c’est ce à quoi vous vous attendiez ? df montre amplement d’espace, donc ce n’est pas un problème de disque plein.

# ./discourse-doctor
DISCOURSE DOCTOR Mon 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

Found containers/app.yml

==================== YML SETTINGS ====================
[deleted for privacy reasons]

==================== 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 days ago   Up 9 hours             9000/tcp                                                                   ttrss-docker_updater_1
fb0c774b31cb   cthulhoo/ttrss-web-nginx:latest              “/docker-entrypoint.…”   4 days ago   Up 9 hours (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 days ago   Up 9 hours             9000/tcp                                                                   ttrss-docker_backups_1
c211bc93f368   cthulhoo/ttrss-fpm-pgsql-static:latest       “/bin/sh -c ${SCRIPT…”   4 days ago   Up 9 hours             9000/tcp                                                                   ttrss-docker_app_1
4ecb89c6bb9f   postgres:12-alpine                           “docker-entrypoint.s…”   4 days ago   Up 9 hours             5432/tcp                                                                   ttrss-docker_db_1
c668703d805d   traefik:latest                               “/entrypoint.sh trae…”   4 days ago   Up 9 hours             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 days ago   Up 9 hours (healthy)   0.0.0.0:8000->8000/tcp, :::8000->8000/tcp                                  paperless-web
d2fbf8682efb   postgres:13                                  “docker-entrypoint.s…”   4 days ago   Up 9 hours             5432/tcp                                                                   paperless-db
8284f03fdcd0   redis:6.0                                    “docker-entrypoint.s…”   4 days ago   Up 9 hours             6379/tcp                                                                   paperless-redis
ab29487743b0   tootsuite/mastodon                           “/usr/bin/tini -- no…”   4 days ago   Up 9 hours (healthy)   3000/tcp, 4000/tcp                                                         mastodon_streaming_1
a117f5e785f8   tootsuite/mastodon                           “/usr/bin/tini -- bu…”   4 days ago   Up 9 hours (healthy)   3000/tcp, 4000/tcp                                                         mastodon_sidekiq_1
5a4a7e99230c   tootsuite/mastodon                           “/usr/bin/tini -- ba…”   4 days ago   Up 9 hours (healthy)   3000/tcp, 4000/tcp                                                         mastodon_web_1
5484d4dd39b6   postgres:14-alpine                           “docker-entrypoint.s…”   4 days ago   Up 9 hours (healthy)   5432/tcp                                                                   mastodon_db_1
ecb2e7cbdc0b   redis:7-alpine                               “docker-entrypoint.s…”   4 days ago   Up 9 hours (healthy)   6379/tcp                                                                   mastodon_redis_1

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

Discourse container app is running

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

No non-official plugins detected.

See https://github.com/discourse/discourse/blob/main/lib/plugin/metadata.rb for the official list.

========================================
Discourse version at talk.spielleiten.de: NOT FOUND
Discourse version at localhost: NOT FOUND

==================== MEMORY INFORMATION ====================
RAM (MB):

              total        used        free      shared     buffers     cached
Mem:        7870        2292         141        4207        5436        1101
Swap:       2047         580        1467

==================== DISK SPACE CHECK ====================
---------- OS Disk Space ----------
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda2       114113240 71306204  37794364  66% /
/dev/md0       3907024064 3144016128 594984192  85% /mnt/raid

==================== DISK INFORMATION ====================
Disk /dev/sda: 111.81 GiB, 120034123776 bytes, 234441648 sectors
Disk model: Samsung SSD 840
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: F889FA6C-2FB7-44B6-8CDF-1E6A05B9E33D

Device     Start       End   Sectors   Size Type
/dev/sda1     2048   1050623   1048576   512M EFI System
/dev/sda2  1050624 234440703 233390080 111.3G Linux filesystem


Disk /dev/sdb: 186.32 GiB, 200049647616 bytes, 390721968 sectors
Disk model: SAMSUNG HD200HJ
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x13e913e8

Device     Boot Start       End   Sectors  Size Id Type
/dev/sdb1         2048 390721967 390719920  186G 83 Linux


Disk /dev/sdc: 1.84 TiB, 2000398934016 bytes, 3907029168 sectors
Disk model: SAMSUNG HD203WI
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00000000

Device     Start       End   Sectors  Size Id Type
/dev/sdc1           63 3907024064 3907024002 1.8T fd Linux raid autodetect


Disk /dev/sde: 1.84 TiB, 2000398934016 bytes, 3907029168 sectors
Disk model: SAMSUNG HD203WI
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x54cd8732

Device     Start       End   Sectors  Size Id Type
/dev/sde1           63 3907024064 3907024002 1.8T fd Linux raid autodetect


Disk /dev/sdd: 1.84 TiB, 2000398934016 bytes, 3907029168 sectors
Disk model: SAMSUNG HD203WI
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xd4a5e07f

Device     Start       End   Sectors  Size Id Type
/dev/sdd1           63 3907024064 3907024002 1.8T fd Linux raid autodetect


Disk /dev/md0: 3.65 TiB, 4000792182784 bytes, 7814047232 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 65536 bytes / 131072 bytes

==================== END DISK INFORMATION ====================

==================== DONE! ====================

1 « J'aime »