Soru Docker İçinde Chromium - Gtk: ekranı açamıyor:: 0


Bir docker kabının içinde krom çalıştırmaya çalıştığımda, aşağıdaki hatayı görüyorum: Gtk: ekranı açamıyor:: 0

Dockerfile: (dayalı 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"]

inşa et ve çalıştır:

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

ve hata:

[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

24
2018-02-08 10:33


Menşei




Cevaplar:


krom hakkında pek bir şey bilmiyorum, ama ben X yolu ile çalıştım ne zaman :-) Bir X istemciye şu şekilde bağlanacağını söyleyin: 0, ne demek olduğunu bağlantı noktası 6000'e bağlanmak (ya da X sunucunuz çalışırsa) Bu durumda + 0 veya port 6000. Aslında, DISPLAY IP: PORT (yukarıda belirtildiği gibi +6000 ile). X sunucusu ana makinenizde çalışıyor, bu nedenle şunları ayarlarsanız:

DISPLAY=your_host_ip:0

işe yarayabilir. Ancak, X sunucuları sadece herhangi bir eski istemciden bağlantıya izin vermediğinden, X sunucunuzu açmanız gerekecektir. ev sahibinizde koş

xhost +

docker kabını çalıştırmadan önce. Tüm bunlar, sunucunuzda kromu çalıştırabileceğinizi varsayacaktır (yani, sunucunuzda bir X sunucusu var).


40
2018-02-08 14:56



xhost + çözüldü. teşekkür ederim. - user3538553
kapsayıcıyı durdurmak xhost + ev sahibi ve kapsayıcıyı tekrar baştan benim için yaptı - GameScripting
Yoksa öyle gözüküyorsun xhost +local:docker daha kısıtlayıcı olmak. - Andy Smith
Xhost + yaparsanız, xwindowssystem'inize erişim denetimini büyük ölçüde devre dışı bırakırsınız. Yani xhost + SI için daha kısıtlayıcı bir xhost kullanın: root kullanıcısı, docker daemon'unuzu çalıştıran kullanıcı ise root. Bu, sadece yerel bir soket bağlantısına izin verecek ve internet veya ağ sunucularınızın xwindows'unuza erişmesine izin vermeyecektir. - opentokix
Çekici olsa da, YAPMAYIN. Yukarıdaki yorumu görün. Bu çözüm temelde MAKİNENİZE BAĞLI HERHANGİ BİR İZİN VERİLİR. Daha kısıtlayıcıyı kullanmayı tercih et stackoverflow.com/a/34586732/345845 sadece yerel bağlantıya izin vermek - Baptiste Mathus


Deneyin

xhost local:root

Bu benimkini çöz, ben Debian Jessie'dayım. https://github.com/jfrazelle/dockerfiles/issues/4


24
2018-01-04 07:48



Bu da Ubuntu üzerinde çalışıyor - Andy Smith
Archlinux üzerinde çalıştım, düşünüyorum, şimdi tam docker'a gidebilirim! - HugoTai


Referans olarak ekleme (greg'den gerçek cevaplara bakın)

Docker resminde ekle

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

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

ve sonra koş

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

örnek bir komutu kontrol et

xclock

1
2017-07-19 06:43