在 docker Swarm Stack 的节点内运行 GUI 应用程序

问题描述 投票:0回答:0

我创建了一个由 1 个管理节点控制的 n 个工作节点组成的 Docker Swarm。我的目标是在主机名为

sim-pilot
的指定工作节点的容器内运行图形应用程序。我已经这样定义了我的
docker-stack.yaml

services:
  sim:
    image: sim_img:latest
    environment:
      DISPLAY: $DISPLAY
      XDG_RUNTIME_DIR: 1
      NVIDIA_VISIBLE_DEVICES: all
      NVIDIA_DRIVER_CAPABILITIES: all
    volumes:
      - type: bind
        source: /tmp/.X11-unix
        target: /tmp/.X11-unix
    deploy:
      placement:
        constraints: [ node.hostname == sim-pilot ]
...

我想要运行的图形应用程序是一个内置的虚幻引擎游戏。我已经使用

docker compose run --rm sim
.

在本地 docker 容器中成功运行了这个图形应用程序

但是,当我像这样启动我的 Docker 堆栈时:

docker stack deploy -c docker-stack.yaml flightsim

运行图形应用程序的容器似乎没有提供所需的显示设备和/或 X11 文件?错误结果如下:

[2023.02.26-03.07.30:479][  0]LogInit: Initializing SDL.
[2023.02.26-03.07.30:480][  0]LogInit: Warning: Could not initialize SDL: No available video device
[2023.02.26-03.07.30:480][  0]LogInit: Warning: FDisplayMetrics::GetDisplayMetrics: InitSDL() failed, cannot get display metrics

我相信发生这种情况是因为当我去挂载卷时,源目录引用了管理器的文件系统,而不是远程工作节点。这会导致连接错误的 X11 服务器?

简而言之,如何使用 Docker Swarm 在工作节点的容器内运行图形应用程序?

docker docker-compose docker-swarm
© www.soinside.com 2019 - 2024. All rights reserved.