docker - 从 Docker 容器显示 Android Studio GUI,同时通过 headless Ubuntu 服务器进行 SSH 隧道传输

标签 docker ubuntu x11 alpine ssh-tunnel

我有一个 headless Ubuntu Server (19.04),我想在其上运行一个 Docker 容器,其唯一目的是运行 Android Studio。 Ubuntu 服务器没有任何图形用户界面。它只是严格的命令行。我目前在一个 Ubuntu VM (18.04) 上,它通过一个 SSH 隧道连接到 Ubuntu 服务器,该隧道通过另一个 SSH 隧道连接到我的 Home_Router:

ssh admin@Home_Router -L 22222:10.0.0.2:22
ssh user@localhost -p 22222

隧道图基本上是这样的:
     Me
 (Ubuntu_VM)                    Home_Router         Ubuntu_SVR
--------------                --------------      --------------
|            |   {INTERNET}   |            |      |            |
|            ----------------->22          |      |            |
|       22222>==============================------>22          |
|            |                |            |      |            |
--------------                --------------      --------------
                                                     10.0.0.2

Docker 容器基于 Alpine Linux 并安装了 Android Studio 以及 coreutils , openjdk8-jre , 和 xorg-server .当我运行容器时:
docker run -it -v "$HOME/.Xauthority:/root/.Xauthority:rw" --env DISPLAY="$DISPLAY" --net=host --rm android-studio

...我收到以下错误:
Startup Error: Unable to detect graphics environment

我需要做什么才能将 Android Studio GUI 从 Docker 容器转发到我的 Ubuntu VM?这可以通过 X11 转发吗?

最佳答案

我能够弄清楚这一点 - 希望它可以帮助其他人:

第 1 步:在托管 Docker 容器的服务器上启用 X11 转发

  • 确保 /etc/ssh/sshd_config包含以下行:
    X11Forwarding yes
    
  • SIGHUP sshd捡起零钱
    cat /var/run/sshd.pid | xargs kill -1
    
  • 验证 xauth如果安装在服务器上
    which xauth
    

    如果不是,请使用您的包管理器安装它。

  • 第 2 步:通过 SSH 连接到托管 Docker 容器的服务器
  • 在 Linux 中,您的 ssh命令需要包含 -X选项。例子:
    ssh -X user@<IP_OF_DOCKER_SERVER>
    
  • 从 Windows(通过 PuTTY):
  • Windows 需要安装 X 服务器;安装XMing并确保它正在运行。
  • 在 PuTTY 中,转到“连接”>“SSH”>“X11”并选中“启用 X11 转发”旁边的框,然后连接到服务器

  • 第 3 步:运行 docker run来自 SSH 终端的命令
    docker run -it --rm 
      --net=host 
      -v "$HOME/.Xauthority:/root/.Xauthority:rw" 
      -e DISPLAY="$DISPLAY"
      android-studio
    



    备注 : xorg-server不需要安装在 Docker 容器上。

    关于docker - 从 Docker 容器显示 Android Studio GUI,同时通过 headless Ubuntu 服务器进行 SSH 隧道传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59001797/

    相关文章:

    mysql - 带有大写字母的表在 Docker for Windows 中不可见

    bash - 如何确定在 shell 启动期间打印的错误消息来自何处?

    r - 找不到任何 X11 字体错误

    c - 获取X11中的死键列表

    docker - 在具有不同 URL 的同一端口上运行多个 Docker 容器

    python - docker中的pipenv安装包失败

    windows - 在 Windows 10 上将网络文件夹挂载到 Docker 容器

    node.js - 使用 Electron 作为 Ubuntu 上的 npm dev 依赖项

    php - PPA : 'ppa:ondrej/php5-5.6' FORBIDDEN 403

    c++ - XLib - 当我在主函数中构造 XWindowAttributes 时,窗口提示的行为有所不同?