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