我有一个 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 容器的服务器
ssh
命令需要包含 -X
选项。例子:ssh -X user@<IP_OF_DOCKER_SERVER>
第 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/