发布
社区首页 >问答首页 >在docker中运行GUI (没有ssh,没有VNC)

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

Stack Overflow用户
提问于 2015-12-01 09:35:50
回答 1查看 2K关注 0票数 5

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

我试图在Docker中运行arduino IDE (下载的,而不是包)。我编写了Dockerfile如下:

代码语言:javascript
代码运行次数:0
复制
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"]

我花了很多时间来理解杰西卡·弗雷泽尔通常如何用命令启动图形容器来正确地启动我的图形容器

代码语言:javascript
代码运行次数:0
复制
$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检查出了什么问题,并得到以下错误:

代码语言:javascript
代码运行次数:0
复制
connect(3, {sa_family=AF_LOCAL, sun_path=@"/tmp/.X11-unix/X0"}, 20) = -1 ECONNREFUSED (Connection refused)

有人经历过吗?能不能给我指个医生或者看看我做错了什么?

任何帮助都是欢迎的。

PS:正如标题中所指定的,我不想使用ssh或VNC。当unix套接字更快和足够时,不应该使用加密技术,也不应该使用网络。

解决方案

有些消息..。

作为用户根,我不能启动图形应用程序。当我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。

您可以将任何代码上传到arduino中,而无需添加--device -v 来共享< code >E 230 /dev/ttyUSB0**.**

代码语言:javascript
代码运行次数:0
复制
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"]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-09 17:23:41

有些消息..。

作为用户根,我不能启动图形应用程序。当我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。

您可以将任何代码上传到arduino中,而无需添加--device -v 来共享< code >E 221 /dev/ttyUSB0**.**

代码语言:javascript
代码运行次数:0
复制
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"]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34017038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档