Ejecutando Cromo dentro de Docker-Gtk: no se puede abrir display:: 0


Cuando intento ejecutar chromium dentro de un contenedor docker veo el siguiente error: Gtk: cannot open display:: 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
Author: user3538553, 2015-02-08

3 answers

No se mucho sobre chromium, pero, trabajé con X hace mucho tiempo cuando :-) Cuando le dices a un cliente X que se conecte a :0, lo que estás diciendo es que se conecte al puerto 6000 (o lo que sea que se ejecute tu servidor X) + 0, o al puerto 6000 en este caso. De hecho, la PANTALLA es IP:PUERTO (con el +6000 como se mencionó anteriormente). El servidor X se está ejecutando en su host, por lo que, si establece:

DISPLAY=your_host_ip:0

Eso podría funcionar. Sin embargo, los servidores X no permitían conexiones desde cualquier cliente antiguo, por lo que deberá abrir su servidor X. en su anfitrión, ejecute

xhost +

Antes de ejecutar el contenedor docker. Todo esto supone que puede ejecutar chromium en su host (es decir, que existe un servidor X en su host).

 42
Author: Greg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-08 14:56:30

Intenta

xhost local:root

Esto resuelve el mío, estoy en Debian Jessie. https://github.com/jfrazelle/dockerfiles/issues/4

 24
Author: RANDRIAMILASOA Hajaniaina Stan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-04 07:48:11

Añadiendo como referencia (ver respuesta real de greg)

In Docker image add

RUN apt-get update
RUN apt-get install -qqy x11-apps

Https://people.ece.cornell.edu/skand/post/x-forwarding-on-docker /

Y luego ejecutar

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

Compruebe un comando de ejemplo

xclock
 1
Author: Alex Punnen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-19 06:55:34