通过无头Ubuntu服务器通过SSH隧道显示来自Docker容器的Android Studio GUI

我有一个无头的Ubuntu Server(19.04),我想在其上运行Docker容器,该容器的唯一目的是运行Android Studio。 Ubuntu Server没有任何GUI。严格来说,它仅是命令行。我目前在通过SSH隧道连接到Ubuntu服务器的Ubuntu VM(18.04)上,该隧道通过另一个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,以及coreutilsopenjdk8-jrexorg-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转发?

zhang20090630 回答:通过无头Ubuntu服务器通过SSH隧道显示来自Docker容器的Android Studio GUI

我能够弄清楚这一点-希望它能对其他人有所帮助

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

  1. 确保/etc/ssh/sshd_config包含以下行:

    X11Forwarding yes
    
  2. SIGHUP sshd领取更改

    cat /var/run/sshd.pid | xargs kill -1
    
  3. 验证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步:从SSH终端运行docker run命令

docker run -it --rm 
  --net=host 
  -v "$HOME/.Xauthority:/root/.Xauthority:rw" 
  -e DISPLAY="$DISPLAY"
  android-studio


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

本文链接:https://www.f2er.com/3048140.html

大家都在问