ocean - Ejecución de Chromium dentro de Docker-Gtk: no se puede abrir la pantalla:: 0
nginx inside docker (3)
Cuando intento ejecutar cromo dentro de un contenedor docker, veo el siguiente error: Gtk: no se puede abrir la pantalla:: 0
Dockerfile: (basado en https://registry.hub.docker.com/u/jess/chromium/dockerfile )
FROM debian:jessie
# Install Chromium
RUN sed -i.bak ''s/jessie main/jessie main contrib non-free/g'' /etc/apt/sources.list && /
apt-get update && apt-get install -y /
chromium /
chromium-l10n /
libcanberra-gtk-module /
libexif-dev /
libpango1.0-0 /
libv4l-0 /
pepperflashplugin-nonfree /
--no-install-recommends && /
mkdir -p /etc/chromium.d/
# Autorun x11vnc
CMD ["/usr/bin/chromium", "--no-sandbox", "--user-data-dir=/data"]
construir y ejecutar:
docker build -t chromium
docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --privileged chromium
y el error:
[1:1:0202/085603:ERROR:browser_main_loop.cc(164)] Running without the SUID sandbox! See https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment for more information on developing with the sandbox on.
No protocol specified
[1:1:0202/085603:ERROR:browser_main_loop.cc(210)] Gtk: cannot open display: :0
Agregando como referencia (ver respuesta real de greg)
En Docker agregar imagen
RUN apt-get update
RUN apt-get install -qqy x11-apps
https://people.ece.cornell.edu/skand/post/x-forwarding-on-docker/
y luego correr
sudo docker run --env DISPLAY=unix$DISPLAY --privileged --volume $XAUTH:/root/.Xauthority --volume /tmp/.X11-unix:/tmp/.X11-unix --rm --runtime=nvidia --rm -it -v /home/alex/coding:/coding alexcpn/nvidia-cuda-grpc:1.0 bash
comprobar un comando de muestra
xclock
No sé mucho sobre el cromo, pero sí trabajé con X cuando :-) Cuando le dices a un cliente X que se conecte a: 0, lo que estás diciendo es conectarse al puerto 6000 (o lo que sea que funcione tu servidor X) en) + 0, o puerto 6000 en este caso. De hecho, DISPLAY es IP: PORT (con el +6000 como se mencionó anteriormente). El servidor X se está ejecutando en su host, por lo tanto, si configura:
DISPLAY=your_host_ip:0
aquello podría funcionar. Sin embargo, los servidores X no permitieron conexiones desde cualquier cliente anterior, por lo tanto, tendrá que abrir su servidor X. en tu host, corre
xhost +
Antes de ejecutar el contenedor docker. Todo esto supone que puede ejecutar cromo en su host (es decir, existe un servidor X en su host).
Tratar
xhost local:root
Esto resuelve el mío, estoy en Debian Jessie. https://github.com/jfrazelle/dockerfiles/issues/4