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

在Azure容器实例中部署带录屏功能的Docker-Selenium Grid 4时遭遇无法打开显示的错误

我来帮你解决这个录屏容器无法连接到Selenium Node的问题。从错误日志来看,核心问题是视频容器无法访问到目标容器的X11显示端口(:99.0)——默认情况下Selenium Node容器的Xvfb仅监听本地Unix Socket,而Azure容器实例中不同容器之间默认不共享这个Socket,导致连接失败。

下面是两种可行的解决方案,推荐优先使用第一种:


解决方案1:共享X11 Unix Socket(推荐)

通过添加共享卷挂载/tmp/.X11-unix目录,让视频容器直接访问Node容器的X11 Socket,这是最可靠的方式。

修改你的容器定义文件,做以下调整:

  1. 在volumes部分新增一个用于共享X11 Socket的emptyDir卷
  2. 给Chrome Node容器和视频容器都挂载这个卷
  3. 视频容器直接设置DISPLAY环境变量为:99,无需依赖DISPLAY_CONTAINER_NAME

完整修改后的容器定义示例:

apiVersion: 2019-12-01
location: germanywestcentral
name: nameforcontainergroup2
properties:
  containers:
  - name: selenium-hub
    properties:
      image: selenium/hub:4.1.1-20211217
      resources:
        requests:
          cpu: 1
          memoryInGb: 1
      ports:
      - port: 4444
  - name: chrome-node
    properties:
      image: selenium/node-chrome:4.1.1-20211217
      resources:
        requests:
          cpu: 1
          memoryInGb: 2
      environmentVariables:
      - name: SE_EVENT_BUS_HOST
        value: selenium-hub  # 修正:之前设为localhost错误,改为Hub容器名称
      - name: SE_EVENT_BUS_PUBLISH_PORT
        value: 4442
      - name: SE_EVENT_BUS_SUBSCRIBE_PORT
        value: 4443
      - name: SE_NODE_PORT
        value: 5560
      - name: VNC_NO_PASSWORD
        value: 1
      - name: DISPLAY
        value: ":99"  # 明确指定DISPLAY端口
      volumeMounts:
      - name: devshm
        mountPath: /dev/shm
      - name: downloads
        mountPath: /home/seluser/downloads
      - name: x11-socket
        mountPath: /tmp/.X11-unix
  - name: chrome-node-1-video
    properties:
      image: selenium/video:ffmpeg-4.3.1-20211217
      resources:
        requests:
          cpu: 1
          memoryInGb: 2
      environmentVariables:
      - name: DISPLAY
        value: ":99"  # 直接使用共享的Socket
      - name: FILE_NAME
        value: chrome-node_video.mp4
      volumeMounts:
      - name: videos
        mountPath: /videos
      - name: x11-socket
        mountPath: /tmp/.X11-unix
  osType: Linux
  volumes:
  - name: devshm
    emptyDir: {}
  - name: downloads
    emptyDir: {}
  - name: videos
    emptyDir: {}
  - name: x11-socket  # 新增:共享X11 Socket的卷
    emptyDir: {}
ipAddress:
  ports:
  - protocol: tcp
    port: '4444'
  type: Public
  dnsNameLabel: some-dns-label
tags: null
type: Microsoft.ContainerInstance/containerGroups

解决方案2:配置Xvfb监听TCP端口

如果不想共享Socket,可以修改Node容器的Xvfb参数,让它监听TCP端口,允许视频容器远程连接:

  1. 在Chrome Node容器中添加环境变量,修改Xvfb的启动参数:
- name: XVFB_ARGS
  value: "-screen 0 1920x1080x24 -ac -nolisten unix -listen tcp"
- name: DISPLAY
  value: ":99"

这个参数会让Xvfb放弃监听Unix Socket,转而监听TCP端口6099(对应DISPLAY :99,端口号为6000+99)。

  1. 保持视频容器的DISPLAY_CONTAINER_NAME为chrome-node即可,视频容器会自动解析容器名称到IP并连接对应端口。

额外注意事项

  • 修正了SE_EVENT_BUS_HOST的值:之前设为localhost是错误的,Hub是独立容器,必须设置为Hub的容器名称selenium-hub,Node才能正确注册到Hub。
  • 资源配置:Chrome和Xvfb需要足够的资源,你设置的1CPU/2GB是合理的,如果部署多个Node,需要相应调整资源配额。
  • 视频持久化:当前videos卷是emptyDir,容器重启后视频会丢失,如果需要持久化,可以改为Azure文件共享卷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:56:07