
Estoy creando un contenedor acoplable que debería mostrar información sobre el estado del sistema en una página web.
Tengo un contenedor PHP-fpm y NGINX en ejecución. Si uso shell_exec
o exec
el script .sh que hice se encuentra y se ejecuta.
Sin embargo, no muestra el resultado de hddtemp
y (lm-)sensors
. Probablemente porque no existen en el contenedor PHP.
¿Cuál sería la forma correcta de solucionar este problema?
- Mi colega afirmó que en Linux, "todo es un archivo", pero supongo que no puedo simplemente montar estas aplicaciones en el contenedor php-fpm y esperar que funcionen. También suena bastante complicado y es posible que el contenedor php-fpm no sea el mismo sistema operativo, no cumpla con los requisitos o no pueda ejecutar la 'configuración de sensores'.
- Por supuesto, podría ejecutar estas aplicaciones en el sistema operativo principal y escribir los resultados en un archivo de vez en cuando y montarlo en el contenedor. Pero otra vez; ¿Esto anula el propósito de Docker?
- Supongo que podría crear mi propia versión de PHP-fpm, pero esto significaría que tendría que recrearla cada vez que haya una actualización para PHP. Esto también suena un poco a truco.
Entonces, ¿cuál sería la forma correcta de hacer esto (no tiene que ser ninguna de las anteriores)?
Actualmente tengo la siguiente 'solución de trabajo':
(Docker componer)
php:
image: php:7-fpm
privileged: true
volumes:
- /usr/sbin/hddtemp:/usr/sbin/hddtemp
- /etc/hddtemp.db:/etc/hddtemp.db
(PHP)
var_dump(shell_exec("/usr/sbin/hddtemp /dev/sda 2>&1"));
Sin embargo; en este caso tengo que ejecutar PHP en modo 'privilegiado' en la ventana acoplable, siento que esto está mal, pero ¿necesita acceder a diskinfo?
Respuesta1
No son los comandos los que faltan. Puede poner copias de los comandos en el contenedor. O su equivalente. Lo que falta es acceso a la información que necesitan.
Puede agregar este mi montaje /proc
desde el host al contenedor.Ten cuidado, ya que esto romperá todo el aislamiento.. Es posible que puedas montarlo como de solo lectura y hidepid=2. También puede haber otras opciones.