通过无头Ubuntu服务器进行SSH隧道时从Docker容器显示Android Studio GUI

问题描述 投票:0回答:1

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

docker ubuntu x11 alpine ssh-tunnel
1个回答
0
投票

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

步骤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


[Note:不需要在Docker容器上安装xorg-server

© www.soinside.com 2019 - 2024. All rights reserved.