You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker环境安装gosu gem失败,报错SDL Video无可用视频设备

解决Docker中安装gosu gem的SDL视频设备错误

问题根源

Gosu依赖SDL2视频模块,但Docker容器默认没有真实的X11显示环境,导致无法初始化视频设备,触发Could not initialize SDL Video: No available video device错误。

解决方案

需要在容器中安装虚拟显示服务器xvfb,通过虚拟帧缓冲模拟显示环境,让Gosu正常工作。

1. 修改Dockerfile

更新Dockerfile,添加xvfb安装并配置对应环境变量:

FROM ruby:latest

WORKDIR /usr/src/app

# 安装依赖,包含虚拟显示服务器xvfb
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        build-essential \
        libsdl2-dev \
        libgl1-mesa-dev \
        libopenal-dev \
        libgmp-dev \
        libfontconfig1-dev \
        xorg-dev \
        xvfb \
    && gem install gosu \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# 配置显示环境变量,指定虚拟显示编号
ENV DISPLAY=:1
ENV XDG_RUNTIME_DIR=/tmp

COPY . .

EXPOSE 3000

2. 启动容器时初始化虚拟显示

启动容器时先启动xvfb服务,再运行Ruby程序:

docker run -it --rm your-image-name /bin/bash -c "Xvfb :1 -screen 0 1024x768x16 & sleep 2 && ruby your-app-entry.rb"

也可以把启动命令写入Dockerfile的CMD:

CMD ["sh", "-c", "Xvfb :1 -screen 0 1024x768x16 & sleep 2 && ruby your-app-entry.rb"]

补充说明

  • Xvfb :1 -screen 0 1024x768x16创建编号为:1的虚拟显示,分辨率1024x768、颜色深度16,与DISPLAY变量对应。
  • sleep 2是给xvfb预留启动时间,确保虚拟显示就绪后再执行程序。

内容的提问来源于stack exchange,提问作者Tanas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:37:12