Estoy construyendo un contenedor Docker que tiene maven y algunas dependencias. Luego ejecuta un script dentro del contenedor. Parece que una de esas dependencias necesita un servidor X para funcionar. No se muestra nada en la pantalla, pero parece necesario y no se puede evitar.
Lo hice funcionar poniendo ENV DISPLAY=xxxx:0 en Dockerfile y se conecta al Xserver externo y funciona. Pero el punto es hacer un contenedor autosuficiente de Docker.
Entonces necesito agregar un Xserver a mi contenedor agregando Dockerfile lo necesario. Y quiero que Xserver solo sea accesible por el propio contenedor Docker y no externamente.
El FROM de mi Dockerfile es FROM ubuntu:15.04 y eso no se puede cambiar porque mi Dockerfile tiene muchas cosas que dependen de esa versión específica.
He leído una publicación sobre cómo conectarse desde el contenedor Docker a Xserver de la máquina host Docker, como esta . Pero como puse en el título de la pregunta, el host Docker no tiene cabeza y no tiene Xserver.
apt-get para instalar en el contenedor para tener un Xserver?ENV DISPLAY=:0 . ¿Es esto correcto?docker run ?Gracias.
Puede instalar y ejecutar un x11vnc dentro de su contenedor docker. Le mostraré cómo hacer que se ejecute en un host sin cabeza y conectarlo de forma remota para ejecutar aplicaciones X (por ejemplo, xterm).
archivo acoplable:
FROM joprovost/docker-x11vnc RUN mkdir ~/.vnc && touch ~/.vnc/passwd RUN x11vnc -storepasswd "vncdocker" ~/.vnc/passwd EXPOSE 5900 CMD ["/usr/bin/x11vnc", "-forever", "-usepw", "-create"] Y crea una docker image llamada vnc :
docker build -t vnc . Ejecute un contenedor y recuerde asignar el puerto 5900 al host para la conexión remota (estoy usando --net=host aquí):
docker run -d --name=vnc --net=host vnc Ahora tiene un contenedor en ejecución con x11vnc dentro, descargue un cliente vnc como realvnc e intente conectarse a <server_ip>:5900 desde local, la contraseña es vncdocker que está configurada en Dockerfile , llegará a la pantalla X remota con un xterm abierto. Si ejecuta env y encontrará la variable de entorno DISPLAY=:20
Vayamos al contenedor docker e intentemos abrir otro xterm :
docker exec -it vnc bashLuego ejecute el siguiente comando dentro del contenedor:
DISPLAY=:20 xterm Aparecerá una nueva ventana xterm en la ventana de su vnc client . Supongo que esa es la forma en que va a ejecutar su aplicación.
Nota :
ubuntu 14 , pero supongo que el paquete es similar en ubuntu 16Espero que esto pueda ayudar :-)