在Docker中运行Chromium – Gtk:无法打开显示:: 0

当我尝试运行docker容器中的铬时,我看到以下错误:Gtk:can not open display :: 0

Dockerfile :(基于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"] 

build立和运行:

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

和错误:

 [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 

我对铬的知识不太了解,但是,我确实使用了X方法:-)当您告诉X客户端连接到0时,您所说的是连接到端口6000(或者任何您的X服务器运行on)+ 0,或者在这种情况下是6000端口。 实际上,DISPLAY是IP:PORT(上面提到的+6000)。 X服务器正在主机上运行,​​所以如果你设置了:

 DISPLAY=your_host_ip:0 

这可能工作。 但是,X服务器不允许任何旧客户端连接,因此,您需要打开X服务器。 在你的主机上运行

 xhost + 

在运行docker集装箱之前。 所有这一切都假设您可以在您的主机上运行铬(也就是说,主机上存在一个X服务器)。

尝试

 xhost local:root 

这解决了我的问题,我在Debian Jessie上。 https://github.com/jfrazelle/dockerfiles/issues/4