web-dev-qa-db-fra.com

Exécution de Chrome dans Docker - Gtk: impossible d'ouvrir l'affichage:: 0

Lorsque j'essaie d'exécuter du chrome dans un conteneur Docker, je vois l'erreur suivante: Gtk: impossible d'ouvrir l'affichage:: 0

Dockerfile: (basé sur 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"]

construire et exécuter:

docker build -t chromium
docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --privileged chromium

et l'erreur:

[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
34
user3538553

je ne sais pas grand chose sur le chrome, mais j'ai travaillé avec X quand :-) Quand vous dites à un client X de se connecter à: 0, ce que vous dites c'est se connecter au port 6000 (ou quoi que votre serveur X fonctionne) on) + 0, ou le port 6000 dans ce cas. En fait, DISPLAY est IP: PORT (avec le +6000 comme mentionné ci-dessus). Le serveur X fonctionne sur votre hôte, donc, si vous définissez:

DISPLAY=your_Host_ip:0

cela pourrait fonctionner. Cependant, les serveurs X ne permettaient pas les connexions de n'importe quel ancien client, vous devrez donc ouvrir votre serveur X. sur votre hôte, exécutez

xhost +

avant d'exécuter le conteneur Docker. Tout cela suppose que vous pouvez exécuter le chrome sur votre hôte (c'est-à-dire qu'un serveur X existe sur votre hôte).

54
Greg

Essayer

xhost local:root

Cela résout le mien, je suis sur Debian Jessie. https://github.com/jfrazelle/dockerfiles/issues/4

Ajout comme référence (voir la vraie réponse de greg)

Dans l'image Docker ajouter

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

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

puis exécutez

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

vérifier un exemple de commande

xclock
3
Alex Punnen