无法在 Archlinux 主机中的 docker 容器中运行 X 应用程序

Posted

技术标签:

【中文标题】无法在 Archlinux 主机中的 docker 容器中运行 X 应用程序【英文标题】:cannot run X apps in a docker container, in Archlinux host 【发布时间】:2015-03-02 14:12:28 【问题描述】:

我有一个 Dockerfile,它使我能够运行 X 应用程序。 它在 Ubuntu 主机上完美运行,但在 Archlinux 主机上却不行:

FROM mascip/archlinux:2014.12.09

# To avoid a bug with the filesystem: https://registry.hub.docker.com/u/base/arch/
RUN sed 's/^CheckSpace/#CheckSpace/g' -i /etc/pacman.conf

# BROWSERS
RUN pacman --noconfirm -S nvidia-libgl && pacman --noconfirm -S leafpad

# NON-ROOT USER
# Replace you uid, gid, and username
RUN pacman --noconfirm -S sudo
RUN export uid=1000 gid=1000 && the_user="abla" && \
    the_home="/home/$the_user" && \
    the_capital_user=$(echo $the_user | sed 's/./\U&/') && \
    mkdir -p $the_home && \
    echo "$the_user:x:$uid:$gid:$the_capital_user,,,:/$the_home:/bin/bash" >> /etc/passwd && \
    echo "$the_user:x:$uid:" >> /etc/group && \
    echo "$the_user ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/$the_user && \
    chmod 0440 /etc/sudoers.d/$the_user && \
    chown $the_user:$the_user -R $the_home

# Replace username and home
ENV USER abla
ENV HOME /home/abla
WORKDIR /home/abla

USER abla

CMD /usr/bin/leafpad

为了运行它,我这样做:

$ docker build -t a1 .

$  docker run -ti \
    -e DISPLAY -e XAUTHORITY=/tmp/.Xauthority -v /home/user/.Xauthority:/tmp/.Xauthority -v /tmp/.X11-unix:/tmp/.X11-unix \
    a1 leafpad

在 Ubuntu 中有效(打开 Leafpad 窗口),但在我得到的 Arch 中无效:

leafpad: Cannot open display:

我需要尽快完成这项工作。任何进一步调查的想法将不胜感激。

PS:我有一个类似的 Docker 容器,它在 Ubuntu 容器中运行 Leafpad;该容器的问题也完全相同。 PPS:Dockerfile 来自这里:[url]http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/[/url]

【问题讨论】:

什么显示 docker exec -it leafpad env ,是否定义了 DISPLAY ? 定义:$ docker exec -it a11 env 显示(我认为我不能在评论中使用换行符...):PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=c2f7459e15d0 TERM=xterm DISPLAY=localhost:0.0 XAUTHORITY=/tmp/.Xauthority HOME=/home/abla USER=abla 【参考方案1】:

尝试使用

xhost +

然后搞乱 xauth 的东西

【讨论】:

以上是关于无法在 Archlinux 主机中的 docker 容器中运行 X 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何解决docker宿主机无法访问容器中的服务

无法从本地主机连接到 Docker 中的 MySQL(Docker for Mac beta)

Archlinux安装docker

我无法使用 DataGrip 数据库客户端从本地主机连接到 docker 中的 mysql

Docker-compose up 在本地完美运行,但在 gcp 上出现错误无法将主机名 db 转换为地址:名称解析中的临时故障

Docker 中的 web api 无法连接到主机上的 SQL Server,出现登录前握手错误