SSH连接Ubuntu Docker服务器运行SpinningUp时GL上下文创建失败求助
用Xvfb解决GL上下文创建失败问题
为什么选Xvfb
测试策略时需要渲染LunarLander环境画面,服务器本身没有物理显示器,哪怕通过SSH-X转发了X连接,GL上下文的兼容性还是容易出问题。Xvfb是虚拟X服务器,能在无物理屏幕的情况下提供虚拟显示环境,生成所需的GL上下文,全程在服务器端解决问题,不用依赖本地的显示能力,刚好适配你不想用本地运行的需求。
具体操作步骤
1. 安装Xvfb
在Ubuntu Docker容器内执行:
apt update && apt install -y xvfb
2. 临时运行(一次搞定)
直接在测试命令前加xvfb-run,自动创建虚拟显示并执行命令:
xvfb-run -a python -m spinup.run test_policy data/installtest/installtest_s0
-a参数会自动找可用的显示端口,避免端口冲突
3. 持久化配置(反复用更方便)
如果要多次运行测试,先启动Xvfb服务,再设置环境变量:
# 启动Xvfb,指定显示端口为:10,屏幕分辨率1024x768 Xvfb :10 -screen 0 1024x768x16 & # 设置环境变量,让后续命令用这个虚拟显示 export DISPLAY=:10 # 现在直接跑测试命令就行 python -m spinup.run test_policy data/installtest/installtest_s0
4. 自动配置(每次登录不用手动设)
把以下内容加到容器内的~/.bashrc文件末尾,每次SSH登录后自动启动Xvfb并配置环境:
# 检查Xvfb是否在运行,没运行就启动 if ! pgrep -x "Xvfb" > /dev/null; then Xvfb :10 -screen 0 1024x768x16 & fi export DISPLAY=:10 export LIBGL_ALWAYS_INDIRECT=1
之后每次登录容器,直接运行测试命令即可。
额外补充
- 确保容器内装了必要的图形依赖,如果之前没装,执行:
apt install -y libgl1-mesa-glx libgl1-mesa-dri
- 确认测试命令里的路径
data/installtest/installtest_s0在容器内存在,路径要正确。
内容的提问来源于stack exchange,提问作者Riru setine
相关产品推荐
相关产品推荐

