¿Lo entendí bien? ¿`launcher run` no utiliza un contenedor en ejecución actualmente?

Al intentar entender launcher run, por ejemplo:

groot@galaxy:/var/discourse$ sudo ./launcher run app whoami

Si un sitio está activo y en ejecución, el comando anterior no ingresará a ese sitio ni iniciará bash para ejecutar el comando whoami, sino que iniciará un nuevo contenedor basado en la última imagen bootstrapada y luego ejecutará el comando.

En otras palabras, si quiero usar launcher para aprender sobre un sitio en vivo que se ejecuta en un contenedor, debería usar launcher enter en lugar de launcher run.

1 me gusta

Hola @EricGT

Sí, creo que muchos administradores de sistemas de Discourse usan:

./launcher enter  <container_name>

… para entrar al contenedor en ejecución y verificar su estado (o realizar tareas) dentro del mismo.

Sin embargo, ten en cuenta que puedes hacer “lo que parece que quieres hacer” usando Docker directamente (y de forma sencilla). No es necesario usar un script intermedio de shell para obtener esta información en un contenedor en ejecución:

# docker exec -it  app whoami
root

Puede que encuentres útil este enlace sobre la sintaxis del comando docker exec:

Probemos algunos ejemplos más por diversión:

# docker exec -it  app ps aux | grep nginx | wc -l
4
# docker exec -it  app ps aux | grep redis | wc -l
2
# docker exec -it app df 
Filesystem     1K-blocks     Used Available Use% Mounted on
overlay         51043548 26426300  22005700  55% /
tmpfs              65536        0     65536   0% /dev
tmpfs            1017712        0   1017712   0% /sys/fs/cgroup
shm               524288        8    524280   1% /dev/shm
/dev/sda        51043548 26426300  22005700  55% /shared
tmpfs            1017712        0   1017712   0% /proc/acpi
tmpfs            1017712        0   1017712   0% /proc/scsi
tmpfs            1017712        0   1017712   0% /sys/firmware
failed to resize tty, using default size
# docker exec -it app du -sh /shared

403M /shared
# docker exec -it app du -sh /shared/uploads
2.0M	/shared/uploads
# docker exec -it app ls -l /var/www/discourse/plugins/
total 36
drwxr-xr-x  1 discourse discourse 4096 Jun  7 04:49 discourse-details
drwxr-xr-x  1 discourse discourse 4096 Jun  7 04:49 discourse-local-dates
drwxr-xr-x  1 discourse discourse 4096 Jun  7 04:49 discourse-narrative-bot
drwxr-xr-x  1 discourse discourse 4096 Jun  7 04:49 discourse-presence
drwxr-xr-x  1 discourse discourse 4096 Jun  7 04:49 discourse-unsupported-browser
drwxr-xr-x 12 discourse root      4096 Jun  7 04:49 docker_manager
drwxr-xr-x  1 discourse discourse 4096 Jun  7 04:49 lazy-yt
drwxr-xr-x 11 discourse root      4096 Jun  7 04:49 neo-revive-discourse
drwxr-xr-x  1 discourse discourse 4096 Jun  7 04:49 poll
root@localhost:/var/discourse# docker exec -it app ls -l /shared
total 112
drwxr-xr-x  3 discourse www-data  4096 May 23 09:57 backups
drwxr-xr-x 10 root      root      4096 Jun  7 04:55 letsencrypt
drwxr-xr-x  4 root      root      4096 May 23 09:43 log
drwxr-xr-x  2 postgres  postgres  4096 May 23 09:43 postgres_backup
drwx------ 19 postgres  postgres  4096 Jun  7 04:57 postgres_data
drwxrwxr-x  3 postgres  postgres  4096 Jun  7 04:57 postgres_run
drwxr-xr-x  2 redis     redis     4096 Jun  8 02:56 redis_data
drwxr-xr-x  2 root      root      4096 May 28 04:19 ssl
drwxr-xr-x  4 root      root      4096 May 23 09:52 state
drwxrwxrwx  4 discourse www-data  4096 Jun  7 04:57 tmp
drwxr-xr-x  3 discourse www-data  4096 May 23 09:46 uploads

Esperemos que estos ejemplos divertidos te den algunas ideas sobre cómo disfrutar usando docker exec para “aprender sobre un sitio en vivo que se ejecuta en un contenedor”, como preguntaste @EricGT

Aquí hay algunos ejemplos más por diversión:

# docker exec -it app ls -l /shared/tmp/redis.sock
srwxrwxrwx 1 redis redis 0 Jun  7 04:57 /shared/tmp/redis.sock

Este no es necesario porque el socket Unix está en el volumen compartido, pero entiendes la idea:

#docker exec -it app redis-cli -s /shared/tmp/redis.sock monitor
OK

(truncated, tons of live, streaming data)

Y finalmente, por supuesto, nuestra favorita “vieja soltera” de los comandos de administración de sistemas:

root@localhost:~# docker exec -it app ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.0   6660   292 pts/0    Ss+  Jun07   0:00 /bin/bash /sb
root         627  0.0  0.0   2308    60 pts/0    S+   Jun07   0:01 /usr/bin/runs
root         628  0.0  0.0   2156    68 ?        Ss   Jun07   0:00 runsv cron
root         629  0.0  0.0   2156    64 ?        Ss   Jun07   0:00 runsv rsyslog
root         630  0.0  0.0   2156    68 ?        Ss   Jun07   0:00 runsv redis
root         631  0.0  0.0   2156    64 ?        Ss   Jun07   0:00 runsv postgre
root         632  0.0  0.0   2156    64 ?        Ss   Jun07   0:00 runsv nginx
root         633  0.0  0.0   2156    64 ?        Ss   Jun07   0:00 runsv unicorn
discour+     634  0.0  0.1  15128  2484 ?        S    Jun07   0:35 /bin/bash con
root         635  0.0  0.1  55176  3956 ?        S    Jun07   0:00 nginx: master
postgres     636  0.0  1.2 351840 26132 ?        S    Jun07   0:04 /usr/lib/post
root         637  0.0  0.0   2300    60 ?        S    Jun07   0:00 svlogd /var/l
redis        638  0.3  0.3  56700  7880 ?        Sl   Jun07   4:01 /usr/bin/redi
root         639  0.0  0.0 156184   588 ?        Sl   Jun07   0:00 rsyslogd -n
root         640  0.0  0.0   8436  1216 ?        S    Jun07   0:00 cron -f
www-data     651  0.0  0.3  56628  6852 ?        S    Jun07   0:00 nginx: worker
www-data     652  0.0  0.0  55668  1676 ?        S    Jun07   0:00 nginx: cache 
postgres     657  0.0  1.8 352116 36776 ?        Ss   Jun07   0:01 postgres: 10/

(truncated)

Como puedes ver o imaginar, docker exec es muy útil y esperamos que estos ejemplos despierten un poco tu imaginación, @EricGT

Aquí hay algunos comandos más útiles de docker exec para Discourse:

6 Me gusta

Esa fue una respuesta genial y estoy muy agradecido por ella, ya que me dio una idea de cómo piensan otros administradores de sistemas Docker sobre lo que es importante y cómo acceder rápidamente a esa información. Sin embargo, los comandos de Docker son un viejo amigo mío, y lo que realmente quería era una respuesta simple de sí o no a:

¿Lo entendí bien? launcher run no utiliza un contenedor en ejecución actual.

Pasé unas horas el otro día analizando un rastreo de bash del comando launcher run y quería asegurarme de que mi análisis era correcto. No habría esperado que launcher run iniciara un contenedor completamente nuevo solo para ejecutar un comando simple como whoami. Lo más preocupante es que, si uno piensa que el comando funcionará contra el contenedor en ejecución actual y le dará retroalimentación sobre el contenedor que ejecuta el sitio en vivo, en su lugar obtendrá información sobre un contenedor diferente.

Estoy totalmente de acuerdo en que la forma en que lo haces con los comandos de Docker es como yo lo haría, pero también coincido en que, a menos que conozcas la diferencia entre $ y #, deberías mantenerte muy lejos de los comandos de Docker y confiar en launcher.

Ahora que sé que te gusta usar preguntas con una pregunta auxiliar como pretexto para destacar cosas que te parecen geniales, intentaré añadirlas de vez en cuando de forma encubierta. :grinning:

Estimado @EricGT

Sí, también utilizo docker run (sin embargo, no launcher run); pero no he encontrado realmente una razón para ejecutar docker run y añadir un comando de shell después del comando run, ya que, como mencioné en mi respuesta, siempre uso docker exec.

Lamento que hayas considerado mi explicación sobre por qué uso docker exec como un “pretexto para hacer menciones”. Te aseguro que estoy realmente ocupado con muchos proyectos y no necesito pretextos para hacer menciones; solo intentaba ayudarte a ti a completar tu tarea, ya que no uso launcher run para ejecutar comandos de shell en un contenedor de Discourse, sino que solo uso docker exec, como mencioné en mi respuesta; intentando ayudarte.

¡Buena suerte con tus futuras tareas de administración de sistemas en Discourse!

¡Disfruta y mantente curioso!

2 Me gusta

La razón por la que pregunto específicamente sobre launch run es que estoy creando un manual de procedimientos operativos estándar (SOP) para otros administradores de Discourse, ya que estamos explorando la posibilidad de autoalojarlo y necesitaba entender cada comando del lanzador en detalle para documentarlo. En este momento, el SOP indica que usar launcher run creará un nuevo contenedor, por lo que advierte no usar launcher run.

Creo que tienes razón en que ./launcher run inicia un nuevo contenedor y ejecuta el comando allí. Si quieres ejecutar el comando en el contenedor existente, debes hacerlo con docker, como se discutió.

Si ./launcher no se comportara de esta manera, no podría funcionar si no hubiera un contenedor existente.

5 Me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.