远程配置服务器 ubuntu22.04 里的 docker 的x11
前提:我在docker端配置了端口映射
一、ubuntuX11相关依赖库和工具
首先安装X11相关依赖库和工具,确保图形界面转发所需组件完整:
bash
sudo apt update && sudo apt install libgl1-mesa-glx libglu1-mesa libqt5opengl5-dev
apt-get install -y mesa-utils
二、Windows端配置
Windows需通过X服务器工具(如Xming或VcXsrv)接收远程Ubuntu的图形界面,步骤如下:
-
安装并启动 Xming 或 VcXsrv (若使用VcXsrv,建议安装时勾选
DisableAC选项,后续连接更灵活)。 -
打开Windows的
cmd命令提示符,执行以下命令配置DISPLAY环境变量(配置后需重新打开一个终端生效):cmdsetx DISPLAY "127.0.0.1:0.0" -
远程连接Ubuntu服务器时,需携带X11转发参数:
- 若安装VcXsrv时勾选了
DisableAC:可使用-X或-Y(推荐-Y,兼容性更强); - 未勾选
DisableAC:建议使用-Y。
连接命令示例:
bashssh -Y 用户名@Ubuntu服务器IP - 若安装VcXsrv时勾选了
三、Ubuntu端配置
1. 修改SSH配置文件
确保SSH服务支持X11转发,编辑配置文件:
bash
sudo vim /etc/ssh/sshd_config
找到以下两行,确保未被注释 (删除行首的#):
ini
X11Forwarding yes
X11UseLocalhost no
2. 重启SSH服务
修改配置后需重启SSH服务生效:
bash
service ssh restart
3. 测试X11配置是否成功
执行xeyes命令,若弹出"大眼睛"图形窗口,说明Ubuntu端X11配置正常:
bash
xeyes
4. 记录关键信息(后续Docker配置需用)
-
步骤1:查看Docker虚拟网桥IP
执行
ifconfig,找到docker0网卡对应的inet地址(通常为172.17.0.1),示例输出:bashdocker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255记住此IP(如
172.17.0.1)。 -
步骤2:查看
DISPLAY环境变量执行
echo $DISPLAY,输出格式通常为[hostname]:[display_number].[screen_number],示例:bashzhenjiuzhe:1.0记住
[display_number].[screen_number]部分(如1.0)。 -
步骤3:获取X11认证信息
执行
xauth list $DISPLAY,找到与上述DISPLAY对应的认证条目,示例:bashzhenjiuzhe:1.0 MIT-MAGIC-COOKIE-x 6xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx记录完整认证信息(含主机名/IP、认证类型、Cookie值)。
四、Docker端配置
1. 远程连接Docker
连接Docker时同样需携带X11转发参数(同Ubuntu远程连接规则,-Y或-X),示例:
bash
ssh -Y 用户名@Docker容器IP
2. 查看Docker虚拟网桥IP
进入Docker后,执行ifconfig,找到Docker自身的虚拟网桥IP(通常为172.17.0.2)。
3. 配置DISPLAY环境变量
将DISPLAY指向Docker虚拟网桥IP(步骤五.2记录的172.17.0.2),并拼接[display_number].[screen_number](步骤四记录的1.0),命令示例:
bash
export DISPLAY=172.17.0.2:1.0
若上述配置无效,可尝试使用 Ubuntu 的 Docker 虚拟网桥 IP(步骤四记录的172.17.0.1),命令:
bashexport DISPLAY=172.17.0.1:1.0
4. 补充:手动添加X11认证(可选)
若export DISPLAY=172.17.0.1:1.0后仍报认证错误,可手动将Ubuntu的X11认证信息添加到Docker中,命令格式:
bash
xauth add [DISPLAY值] 认证类型 Cookie值
结合步骤四记录的认证信息,示例:
bash
xauth add 172.17.0.1:1.0 MIT-MAGIC-COOKIE-x 6xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5. 测试
执行xeyes,若弹出图形窗口,说明Docker端X11转发配置成功。
五、Vscode端配置(可选)
若需通过VS Code远程连接并使用X11图形转发,需完成插件安装、SSH配置修改、插件参数设置三步,具体如下:
1. 安装必要插件
打开VS Code,在左侧"插件市场"搜索并安装以下两个插件:
- Remote X11 (插件ID:
spadin.remote-x11) - Remote X11 (SSH) (插件ID:
spadin.remote-x11-ssh)

会提示已经停止维护了,但是无所谓,还是可以用
2. 修改VS Code的SSH Config文件(关键:启用X11转发)
需在SSH配置中明确开启X11转发相关参数,操作步骤:
-
打开VS Code命令面板(快捷键:
Ctrl+Shift+P); -
在搜索框中输入
SSH: Open SSH Configuration File并回车; -
通常直接按两次回车(默认打开用户目录下的SSH config文件,路径一般为
C:\Users\你的用户名\.ssh\config); -
在目标远程主机(如之前示例的
a30-docker)的配置段中,添加以下三行参数:iniForwardX11 yes ForwardX11Trusted yes ForwardAgent yes完整配置示例(可参考修改):
iniHost a30-docker # 自定义远程主机名(方便记忆) HostName xxxx # 实际远程主机/容器的IP地址(如192.168.1.100) User root # 远程登录用户名 Port 2222 # 远程SSH端口(默认22,非默认需指定,比如我做了端口映射所以是映射的端口号) ForwardX11 yes # 启用X11转发 ForwardX11Trusted yes # 信任X11转发(避免认证问题) ForwardAgent yes # 转发SSH代理(可选,增强兼容性) -
保存文件(快捷键:
Ctrl+S)。
3. 配置Remote X11插件参数
插件和SSH配置完成后,需关联步骤四(Ubuntu端配置)记录的[display_number]和[screen_number](示例中分别为1和0),操作:
- 打开VS Code的"设置"(快捷键:
Ctrl+,); - 在设置搜索框中输入
@ext:spadin.remote-x11,筛选出该插件的专属配置项; - 找到以下两个参数并修改:
- Remote X11: Display :填写步骤四获取的
[display_number](示例:1),对应"连接的显示编号"; - Remote X11: Screen :填写步骤四获取的
[screen_number](示例:0),对应"连接的屏幕编号"。
- Remote X11: Display :填写步骤四获取的
4. 重启VS Code并测试
- 关闭当前VS Code所有窗口,重新打开;
- 通过左侧"远程资源管理器"→选择目标SSH主机(如
a30-docker)→点击"连接到主机"; - 连接成功后,打开VS Code终端,执行
xeyes命令,若弹出图形窗口,说明VS Code端X11转发配置生效。显示图形界面。