容器化 SUMO GUI

本教程展示如何从 Docker 容器内部运行 SUMO GUI。

Caution

SUMO 只能使用 X Window System 从容器中运行。
如果您使用的是 Linux,请确保您的桌面环境支持 X11。
如果您使用的是 Windows,您需要一个独立的 X 服务器(例如 VcXsrv)。

简介#

本教程演示如何在不将软件安装到本地机器的情况下使用 SUMO GUI。

获取 Docker 镜像#

您可以通过以下命令从 SUMO Docker 注册表获取最新的 Docker 镜像:

  docker pull ghcr.io/eclipse-sumo/sumo:latest

或者,通过检出 SUMO 仓库 并执行以下命令来构建您自己的本地版本镜像:

  cd build_config/docker
  docker build -t ghcr.io/eclipse-sumo/sumo:latest -f Dockerfile.ubuntu.git .

启动容器#

本节描述如何启动容器。

只需启动一个容器即可。然后我们将从命令行启动所需的应用程序。

Linux#

本节假设您正在运行 X11 作为主要窗口系统,或者运行兼容 X11 的 Wayland 合成器(例如 Weston)。SUMO 目前不支持 Wayland,需要与 X11 的某种兼容性(另请参见 flathub/org.eclipse.sumo#15)。

大多数发行版默认满足此要求,如果您不确定,请尝试继续操作。

为了允许从 Docker 容器内部运行图形应用程序,我们需要做两件事:

  • 传输要使用的显示信息:-e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:rw
  • 传输授权到容器的信息:-e XAUTHORITY=$XAUTHORITY -v $XAUTHORITY:$XAUTHORITY

我们还需要一个目录来持久化存储我们的结果。在此示例中,我们使用 ~/sumo-projs

因此,启动容器的完整命令如下所示:

mkdir -p ~/sumo-projs/
docker run \
    -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
    -e XAUTHORITY=$XAUTHORITY -v $XAUTHORITY:$XAUTHORITY \
    -v ~/sumo-projs/:/sumo-projs \
    --workdir /sumo-projs \
    -it \
    ghcr.io/eclipse-sumo/sumo:latest bash

然后您将获得一个 shell,您可以在其中启动 GUI 应用程序。例如,输入 neteditsumo-gui

Windows#

启动您的 X 服务器(例如 VcXsrv)并检查“禁用访问控制”设置(通过此设置,安装过程会变得更加简单)。然后,为了告诉容器中的应用程序使用此 X 服务器,我们在命令行中添加 -e DISPLAY=host.docker.internal:0

我们还需要一个目录来持久化存储我们的结果。在此示例中,我们使用 C:\sumo-projs

因此,启动容器的完整命令如下所示:

docker run \
    -e DISPLAY=host.docker.internal:0
    -v C:\sumo-projs:/sumo-projs \
    --workdir /sumo-projs \
    -it \
    ghcr.io/eclipse-sumo/sumo:latest bash

然后您将获得一个 shell,您可以在其中启动 GUI 应用程序。例如,输入 neteditsumo-gui

创建和运行仿真#

按照 Hello SUMO 中的步骤使用此 GUI,并将生成的文件保存在 /sumo-projs 中,以便它们保存在持久化位置。

延伸阅读#

您可以使用 Docker 镜像尝试更多的教程