我创建了一个由 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 在工作节点的容器内运行图形应用程序?