Rm: no se puede eliminar '/var/run/postgresql': El directorio no está vacío

Después de tener un disco lleno y no poder mover mis imágenes, decidí borrar todo, iniciar un nuevo contenedor de discourse y usar la copia de seguridad.

Borré /var/discourse e hice un docker system prune -a.

Luego seguí la guía oficial. Pero… algo va mal:

./launcher rebuild app
Se detecta la arquitectura x86_64.
Asegurando que el lanzador esté actualizado
Solicitando desde origin
El lanzador está actualizado
2.0.20230222-0048: Extrayendo de discourse/base
Digest: sha256:XXXX
Estado: La imagen está actualizada para 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 -- : Leyendo desde stdin
I, [2023-03-04T12:04:27.486188 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2023-03-04T12:04:28.456925 #1]  INFO -- : Generando locales (¡esto puede tardar un poco!)...
Generación completa.

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: no se puede eliminar '/var/run/postgresql': El directorio no está vacío
I, [2023-03-04T12:04:28.616079 #1]  INFO -- :


FALLÓ
--------------------
Pups::ExecError: rm -fr /var/run/postgresql falló con retorno #<Process::Status: pid 16 exit 1>
Ubicación del fallo: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec falló con los parámetros "rm -fr /var/run/postgresql"
bootstrap falló con código de salida 1
** FALLÓ EL ARRANQUE ** por favor, desplázate hacia arriba y busca mensajes de error anteriores, puede haber más de uno.
./discourse-doctor puede ayudar a diagnosticar el problema.

¿Alguien puede ayudarme con esto?

¿Detuviste el contenedor antiguo?

docker stop app
docker rm app

Bueno, aunque eso sería muy propio de mí, esta vez no es tan 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

Creo que el problema podría ser que moví todo desde la ubicación predeterminada anterior de las imágenes de Docker a un nuevo lugar y ahora el contenedor de Docker de Discourse no puede acceder al sistema de archivos que espera.

/var/run/postgresql no existe.

No tengo idea de por qué esto ya no funciona. :cry:

¿Cómo se ve tu app.yml?

$# cat app.yml
## esta es la plantilla de contenedor Docker de Discourse todo en uno e independiente
##
## Después de realizar cambios en este archivo, DEBE reconstruir
## /var/discourse/launcher rebuild app
##
## ¡TENGA MUCHO CUIDADO AL EDITAR!
## ¡LOS ARCHIVOS YAML SON EXTREMADAMENTE SENSIBLES A ERRORES DE ESPACIO BLANCO O ALINEACIÓN!
## visite http://www.yamllint.com/ para validar este archivo según sea necesario

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Descomente estas dos líneas si desea agregar Lets Encrypt (https)
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"

## ¿qué puertos TCP/IP debe exponer este contenedor?
## Si desea que Discourse comparta un puerto con otro servidor web como Apache o nginx,
## consulte https://meta.discourse.org/t/17247 para obtener detalles
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`)      ## Ingrese su dominio aquí
  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`)      ## Ingrese su dominio aquí
  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"

  ## Establezca db_shared_buffers en un máximo del 25% de la memoria total.
  ## se establecerá automáticamente mediante bootstrap según la RAM detectada, o puede anularlo
  #db_shared_buffers: "256MB"

  ## puede mejorar el rendimiento de la clasificación, pero aumenta el uso de memoria por conexión
  #db_work_mem: "40MB"

  ## ¿Qué revisión de Git debe usar este contenedor? (predeterminado: 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

  ## ¿Cuántas solicitudes web concurrentes se admiten? Depende de la memoria y los núcleos de CPU.
  ## se establecerá automáticamente mediante bootstrap según las CPU detectadas, o puede anularlo
  #UNICORN_WORKERS: 3

  ## TODO: El nombre de dominio al que responderá esta instancia de Discourse
  ## Requerido. Discourse no funcionará con un número IP simple.
  DISCOURSE_HOSTNAME: talk.spielleiten.de

  ## Descomente si desea que el contenedor se inicie con el mismo
  ## nombre de host (-h opción) que se especifica arriba (predeterminado "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Lista de correos electrónicos separados por comas que se convertirán en administradores y desarrolladores
  ## en el registro inicial, por ejemplo, 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'XXX'

  ## TODO: El servidor de correo SMTP utilizado para validar nuevas cuentas y enviar notificaciones
  # Se requieren la DIRECCIÓN SMTP, el nombre de usuario y la contraseña
  # ADVERTENCIA: ¡el carácter '#' en la contraseña SMTP puede causar problemas!
[eliminado por razones de privacidad]

  ## La dirección CDN http o https para esta instancia de Discourse (configurada para extraer)
  ## consulte https://meta.discourse.org/t/14857 para obtener detalles
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  ## La clave de licencia de GeoIP de MaxMind para la búsqueda de direcciones IP
  ## consulte https://meta.discourse.org/t/-/137387/23 para obtener detalles
  DISCOURSE_MAXMIND_LICENSE_KEY: XXX

## El contenedor Docker no tiene estado; todos los datos se almacenan en /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Los plugins van aquí
## consulte https://meta.discourse.org/t/19157 para obtener detalles
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Cualquier comando personalizado para ejecutar después de la compilación
run:
  - exec: echo "Comienzo de comandos personalizados"
  ## Si desea establecer la dirección de correo electrónico 'De' para su primer registro, descomente y cambie:
  ## Después de recibir el primer correo electrónico de registro, vuelva a comentar la línea. Solo necesita ejecutarse una vez.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Fin de comandos personalizados"

Esto funcionó hasta que cambié daemon.json:

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

Entonces ese es tu problema. Esto es un problema de Docker, no de Discourse.

Mi suposición es que tiene que ver con los permisos o que la unidad no está ahí de alguna manera.

Supongo que sí. ¡Pero todos los demás servicios en Docker funcionan como se esperaba! Es solo Discourse el que no intenta acceder a la nueva raíz de datos. Por eso esperaba encontrar una solución aquí.

Puede que intentes cambiar los volúmenes a un lugar distinto de /var/discourse/shared/standalone

Presumo que ya has eliminado /var/discourse/shared?

Hice un rm -R /var/discourse y seguí la guía de instalación oficial como uno de los primeros pasos.

¡Intentaré eso!

Intenté tanto un directorio en el mismo disco como una carpeta en “data-root”, nada cambió.

¿Por qué falla el comando rm? Supongo que este sigue siendo el sistema de archivos del sistema operativo (en lugar de dentro del contenedor), y esa operación funciona si repito el comando en el shell.

Creo que ese comando de eliminación está dentro del contenedor que está construyendo.

No creo que tenga más ideas.

¡Muchas, muchas gracias de todos modos!

Ese directorio se mapea a /var/discourse/shared/standalone/postgres_run en el host.

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

¿Es esto lo que esperaría? df muestra espacio suficiente, por lo que no es un problema de disco lleno.

# ./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

Found containers/app.yml

==================== YML SETTINGS ====================
[eliminado por motivos de privacidad]

==================== 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    tmpfs    available
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      114399988 71723104  37718884  66% /
/dev/md0      3906981376 3250374144  595001856  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  186.3G 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   Boot 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   Boot 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   Boot 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! ====================