es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo detecto la emulación QEMU desde dentro de un contenedor Docker?

Desde un contenedor de Docker (en mi caso ejecutando una imagen basada en Debian Busty) ¿cómo puedo detectar si se está ejecutando bajo emulación de QEMU (como ocurre en los Macs ARM para imágenes AMD64)?

Desde la perspectiva no relacionada con Docker, he visto sugerencias de que cpuinfo podría mostrar esto, pero no arroja directamente nada relacionado con QEMU cuando se ejecuta desde dentro de mi contenedor:

$ docker run -it --entrypoint /bin/bash debian-buster-based-amd64-image

ADVERTENCIA: La plataforma de la imagen solicitada (linux/amd64) no coincide con la plataforma del host detectada (linux/arm64/v8) y no se solicitó ninguna plataforma específica.

root@c93f6a8ec754:/app# cat /proc/cpuinfo
procesador: 0
BogoMIPS: 48,00
Características: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 asimddp sha512 asimdfhm dit uscat ilrcpc flagm ssbs sb paca pacg dcpodp flagm2 frint
Implementador de CPU: 0x00
Arquitectura de la CPU: 8
Variante de la CPU: 0x0
Parte de la CPU: 0x000
Revisión de CPU: 0

procesador: 1
BogoMIPS: 48,00
Características: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 asimddp sha512 asimdfhm dit uscat ilrcpc flagm ssbs sb paca pacg dcpodp flagm2 frint
Implementador de CPU: 0x00
Arquitectura de la CPU: 8
Variante de la CPU: 0x0
Parte de la CPU: 0x000
Revisión de CPU: 0

...etc

Docker con QEMU no admite una función en la que depende cierta funcionalidad dentro de mi contenedor (inotify para eventos en el sistema de archivos): estoy buscando cambiar el comportamiento dentro del contenedor para evitar un fallo que ocurre cuando una biblioteca intenta usarlo.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, cuando se ejecuta en un contenedor de Docker, no es fácil determinar si se está ejecutando bajo emulación QEMU. Una posible solución es verificar el valor de la variable de entorno LD_LIBRARY_PATH, ya que puede contener una ruta que hace referencia a las bibliotecas de QEMU. Sin embargo, este enfoque no es infalible y puede devolver falsos positivos.

    Otra opción es inspeccionar la salida del comando dmesg, que puede contener mensajes relacionados con la emulación de QEMU. Sin embargo, esto requiere ejecutar el contenedor con la bandera --privileged, lo cual no se recomienda por razones de seguridad.

    Alternativamente, podrías considerar modificar tu aplicación para evitar el uso de inotify o cambiar a un método diferente de monitoreo de eventos del sistema de archivos que sea compatible con la emulación de QEMU. Esto eliminaría la necesidad de detectar la emulación de QEMU dentro del contenedor y aseguraría que tu aplicación se ejecute sin problemas independientemente del entorno subyacente.

Comments are closed.