运行 docker 中的 GUI(无 ssh,无 VNC)
Running GUI in docker (no ssh, no VNC)
TL;DR: root 不应该 运行 GUI 应用程序,请设置普通用户这样做。
我正在尝试从 Docker 中 运行 arduino IDE(已下载,而非软件包)。我写了 Docker 文件如下:
FROM ubuntu:14.04
MAINTAINER Mael Auzias <docker@mael.auzias.net>
ENV HOME /home/arduino
ENV USER arduino
RUN apt-get update && apt-get install -y \
libx11-6 libxext-dev libxrender-dev libxtst-dev \
--no-install-recommends \
&& useradd --create-home --home-dir $HOME $USER \
&& chown -R $USER:$USER $HOME
ADD arduino-1.6.6-linux64.tar.xz $HOME
WORKDIR $HOME/arduino-1.6.6
USER $USER
ENTRYPOINT ["/bin/bash"]
我花了时间了解 Jessica Frazelle usually starts her graphical containers 如何使用命令正确启动我的:
$docker run --name arduino --rm -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix 25af73b6cb3c ./arduino
No protocol specified
Picked up JAVA_TOOL_OPTIONS:
No protocol specified
Exception in thread "main" java.awt.AWTError: Can't connect to X11 window server using ':0' as the value of the DISPLAY variable.
我安装了 strace
并检查了 xeyes
出了什么问题,我收到以下错误:
connect(3, {sa_family=AF_LOCAL, sun_path=@"/tmp/.X11-unix/X0"}, 20) = -1 ECONNREFUSED (Connection refused)
有人遇到过吗?任何人都可以指出一些文档或看看我做错了什么吗?
欢迎任何帮助。
PS:如题所述我不想使用ssh或VNC。当 unix 套接字更快且足够时,不应使用密码术或网络。
解决方案
有消息...
作为root 用户我无法启动图形应用程序。当我 su regular-user
并启动 xterm
或 xeyes
时,它起作用了。我真的不明白为什么:/
这是在 Fedora 23 上测试的工作 Docker 文件。
该应用程序不得 运行 作为 root,因此它开始使用 X。
请注意,与此问题无关,Java 选项已从 bash 文件 arduino
中删除(因此它可以正常启动)。
在 docker build -t arduino-1.6.6 .
、docker run --name arduino --rm -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix arduino-1.6.6 ./arduino
之后启动 arduino IDE。
您将不能将任何代码上传到 arduino,而无需添加 --device
或 -v
来共享 /dev/ttyUSB0
.
FROM ubuntu:14.04
MAINTAINER Mael Auzias <docker@mael.auzias.net>
ENV HOME /home/arduino
ENV USER arduino
RUN apt-get update && apt-get install -y \
libx11-6 libxext-dev libxrender-dev libxtst-dev \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/* \
&& useradd --create-home --home-dir $HOME $USER \
&& chown -R $USER:$USER $HOME
ADD arduino-1.6.6-linux64.tar.xz $HOME
RUN sed -i 's/"-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel"//g' /home/arduino/arduino-1.6.6/arduino
WORKDIR $HOME/arduino-1.6.6
USER $USER
ENTRYPOINT ["/bin/bash"]
有消息...
作为root 用户我无法启动图形应用程序。当我 su regular-user
并启动 xterm
或 xeyes
时它起作用了。我真的不明白为什么:/
这是工作的 Dockerfile,在 Fedora 23 上测试过。
该应用程序不得 运行 作为根,因此它开始使用 X。
请注意,与此问题无关,Java 选项已从 bash 文件 arduino
中删除(因此它可以正常启动)。
在 docker build -t arduino-1.6.6 .
、docker run --name arduino --rm -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix arduino-1.6.6 ./arduino
之后启动 arduino IDE。
您将不能将任何代码上传到 arduino,而无需添加 --device
或 -v
来共享 /dev/ttyUSB0
.
FROM ubuntu:14.04
MAINTAINER Mael Auzias <docker@mael.auzias.net>
ENV HOME /home/arduino
ENV USER arduino
RUN apt-get update && apt-get install -y \
libx11-6 libxext-dev libxrender-dev libxtst-dev \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/* \
&& useradd --create-home --home-dir $HOME $USER \
&& chown -R $USER:$USER $HOME
ADD arduino-1.6.6-linux64.tar.xz $HOME
RUN sed -i 's/"-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel"//g' /home/arduino/arduino-1.6.6/arduino
WORKDIR $HOME/arduino-1.6.6
USER $USER
ENTRYPOINT ["/bin/bash"]
TL;DR: root 不应该 运行 GUI 应用程序,请设置普通用户这样做。
我正在尝试从 Docker 中 运行 arduino IDE(已下载,而非软件包)。我写了 Docker 文件如下:
FROM ubuntu:14.04
MAINTAINER Mael Auzias <docker@mael.auzias.net>
ENV HOME /home/arduino
ENV USER arduino
RUN apt-get update && apt-get install -y \
libx11-6 libxext-dev libxrender-dev libxtst-dev \
--no-install-recommends \
&& useradd --create-home --home-dir $HOME $USER \
&& chown -R $USER:$USER $HOME
ADD arduino-1.6.6-linux64.tar.xz $HOME
WORKDIR $HOME/arduino-1.6.6
USER $USER
ENTRYPOINT ["/bin/bash"]
我花了时间了解 Jessica Frazelle usually starts her graphical containers 如何使用命令正确启动我的:
$docker run --name arduino --rm -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix 25af73b6cb3c ./arduino
No protocol specified
Picked up JAVA_TOOL_OPTIONS:
No protocol specified
Exception in thread "main" java.awt.AWTError: Can't connect to X11 window server using ':0' as the value of the DISPLAY variable.
我安装了 strace
并检查了 xeyes
出了什么问题,我收到以下错误:
connect(3, {sa_family=AF_LOCAL, sun_path=@"/tmp/.X11-unix/X0"}, 20) = -1 ECONNREFUSED (Connection refused)
有人遇到过吗?任何人都可以指出一些文档或看看我做错了什么吗?
欢迎任何帮助。
PS:如题所述我不想使用ssh或VNC。当 unix 套接字更快且足够时,不应使用密码术或网络。
解决方案
有消息...
作为root 用户我无法启动图形应用程序。当我 su regular-user
并启动 xterm
或 xeyes
时,它起作用了。我真的不明白为什么:/
这是在 Fedora 23 上测试的工作 Docker 文件。
该应用程序不得 运行 作为 root,因此它开始使用 X。
请注意,与此问题无关,Java 选项已从 bash 文件 arduino
中删除(因此它可以正常启动)。
在 docker build -t arduino-1.6.6 .
、docker run --name arduino --rm -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix arduino-1.6.6 ./arduino
之后启动 arduino IDE。
您将不能将任何代码上传到 arduino,而无需添加 --device
或 -v
来共享 /dev/ttyUSB0
.
FROM ubuntu:14.04
MAINTAINER Mael Auzias <docker@mael.auzias.net>
ENV HOME /home/arduino
ENV USER arduino
RUN apt-get update && apt-get install -y \
libx11-6 libxext-dev libxrender-dev libxtst-dev \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/* \
&& useradd --create-home --home-dir $HOME $USER \
&& chown -R $USER:$USER $HOME
ADD arduino-1.6.6-linux64.tar.xz $HOME
RUN sed -i 's/"-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel"//g' /home/arduino/arduino-1.6.6/arduino
WORKDIR $HOME/arduino-1.6.6
USER $USER
ENTRYPOINT ["/bin/bash"]
有消息...
作为root 用户我无法启动图形应用程序。当我 su regular-user
并启动 xterm
或 xeyes
时它起作用了。我真的不明白为什么:/
这是工作的 Dockerfile,在 Fedora 23 上测试过。
该应用程序不得 运行 作为根,因此它开始使用 X。
请注意,与此问题无关,Java 选项已从 bash 文件 arduino
中删除(因此它可以正常启动)。
在 docker build -t arduino-1.6.6 .
、docker run --name arduino --rm -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix arduino-1.6.6 ./arduino
之后启动 arduino IDE。
您将不能将任何代码上传到 arduino,而无需添加 --device
或 -v
来共享 /dev/ttyUSB0
.
FROM ubuntu:14.04
MAINTAINER Mael Auzias <docker@mael.auzias.net>
ENV HOME /home/arduino
ENV USER arduino
RUN apt-get update && apt-get install -y \
libx11-6 libxext-dev libxrender-dev libxtst-dev \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/* \
&& useradd --create-home --home-dir $HOME $USER \
&& chown -R $USER:$USER $HOME
ADD arduino-1.6.6-linux64.tar.xz $HOME
RUN sed -i 's/"-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel"//g' /home/arduino/arduino-1.6.6/arduino
WORKDIR $HOME/arduino-1.6.6
USER $USER
ENTRYPOINT ["/bin/bash"]