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"]
我花了很多时间来理解杰西卡·弗雷泽尔通常如何用命令启动图形容器来正确地启动我的图形容器:
$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套接字更快和足够时,不应该使用加密技术,也不应该使用网络。
解决方案
有些消息..。
作为用户根,我不能启动图形应用程序。当我su regular-user
并启动xterm
或xeyes
时,它会工作。我真的不明白为什么:/
下面是在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
**.**
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"]
发布于 2015-12-09 09:23:41
有些消息..。
作为用户根,我不能启动图形应用程序。当我su regular-user
并启动xterm
或xeyes
时,它会工作。我真的不明白为什么:/
下面是在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
**.**
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"]
https://stackoverflow.com/questions/34017038
复制相似问题