在docker中运行GUI(没有ssh,没有VNC)

时间:2015-12-01 09:35:51

标签: docker arduino-ide

TL; DR:root不应该运行GUI应用程序,设置常规用户这样做。

我正在尝试从Docker中运行arduino IDE(已下载,而非包)。我写了Dockerfile如下:

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通常如何启动她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并开始xtermxeyes时,它就有效。我真的不明白为什么:/

这是在Fedora 23上测试的工作Dockerfile。 应用程序不能以root身份运行,因此它开始使用X. 请注意,无关此问题,已从bash文件arduino中删除了Java选项(因此它正常启动)。

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。

如果没有添加--device-v来共享/dev/ttyUSB0,您 就无法将任何代码上传到arduino。

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"]

1 个答案:

答案 0 :(得分:3)

得到一些消息......

作为用户root我无法启动图形应用程序。当我su regular-user并开始xtermxeyes时,它就有效。我真的不明白为什么:/

这是在Fedora 23上测试的工作Dockerfile。 应用程序不能以root身份运行,因此它开始使用X. 请注意,无关此问题,已从bash文件arduino中删除了Java选项(因此它正常启动)。

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。

如果没有添加--device-v来共享/dev/ttyUSB0,您 就无法将任何代码上传到arduino。

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"]