Estoy buscando ejecutar una aplicación GUI en docker. Escuché que esto incurre en problemas de seguridad debido a que el Xserver está expuesto. Me gustaría saber qué se está haciendo en cada uno de los siguientes pasos, específicamente xhost local:root :
[ -d ~/workspace ] || mkdir ~/workspaceEsto crea un directorio de espacio de trabajo en su directorio de inicio si aún no existe.
xhost local:rootEsto permite que el usuario root en la máquina local se conecte a la pantalla de X windows.
docker run -i --net=host --rm -e DISPLAY -v $HOME/workspace/:/workspace/:z docbill/ubuntu-umake-eclipseEsto ejecuta un contenedor con las siguientes opciones:
-i : interactivo, la entrada escrita después de ejecutar este comando es recibida por el proceso iniciado dentro del contenedor.--net=host : red de host, el contenedor no se inicia con una pila de red aislada. En cambio, se puede acceder directamente a todas las interfaces de red del host dentro del contenedor.--rm automáticamente el contenedor al salir. De lo contrario, el contenedor permanecerá en un estado detenido.-e DISPLAY pasa a través de la variable de entorno DISPLAY del host al contenedor. Esto le dice a los programas GUI dónde enviar su salida.-v $HOME/workspace/:/workspace/:z asigne la carpeta del espacio de trabajo desde su directorio de inicio en el host a la carpeta /workspace dentro del contenedor con la configuración de uso compartido de selinux habilitada.docbill/ubuntu-umake-eclipse ejecute esta imagen, creada por el usuario docbill en el concentrador docker (cualquiera puede crear una cuenta aquí). Esta no es una imagen oficial de Docker, sino una imagen enviada por la comunidad.De las opciones, este comando probablemente esté diseñado para usuarios que se ejecutan en el host RHEL o CentOS Docker. No funcionará en Docker para Windows o Docker para Mac, pero debería funcionar en otras variantes de Linux.
He usado comandos similares para ejecutar mis contenedores con una GUI, pero sin xhost y redes de host. En cambio, acabo de mapear en el socket de X windows ( /tmp/.X11-unix ) directamente al contenedor:
docker run -it --rm -e DISPLAY -u `id -u` \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -v /etc/localtime:/etc/localtime:ro \ my_gui_image