Voglio eseguire attività automatizzate di pulizia utenti dall’host Bash. Manualmente, eseguo
/var/discourse/launcher enter app
rails c
UserDestroyer.new(Discourse.system_user).destroy(User.find_by_username_or_email("user@example.com"), delete_posts: false)
Ho un’ampia lista di nomi utente da un file di testo che devono essere rimossi. Eseguire manualmente questa operazione non è ragionevole. Ho provato a racchiudere il comando di cancellazione in uno script bash. Quando eseguo rails c con il sottocomando launcher app, la connessione Redis fallisce:
/var/discourse/launcher run app "echo \"User.find_by_username_or_email('user@example.com')\" | rails c"
Failed to report error: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) 2 Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) subscribe failed, reconnecting in 1 second.
Tuttavia, quando confronto gli ambienti con export tra launcher enter app e launcher run app, sembrano praticamente identici. Cosa mi sto perdendo? launcher run si avvia in / mentre launcher enter entra direttamente in /var/www/discourse. Usare un cd prima di eseguire rails non aiuta.
Questo è previsto: stai dicendo a Docker di eseguire il file binario /usr/local/bin/rails console nel container. Cioè, un singolo file con uno spazio incorporato. Questo file non esiste.
Considera quanto segue:
○ → docker run -i debian /bin/echo hello
hello
○ → docker run -i debian '/bin/echo hello'
docker: Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: exec: "/bin/echo hello": stat /bin/echo hello: no such file or directory: unknown.
ERRO[0000] error waiting for container: context canceled
Cita il comando nello stesso modo in cui lo eseguiresti dall’interno del container: