第二次调用时无法打开图形应用程序

第二次调用时无法打开图形应用程序

我需要使用一个图形应用程序,该应用程序在远程计算机(运行 Ubuntu 16.04)上的 docker 容器中运行,我可以通过 PuTTY 从运行 Xming 的本地 Windows 计算机访问该图形应用程序。

我设法以一种可以运行 xterm 的方式连接到远程主机(通过 PuTTY X11 选项...)并运行容器(添加.Xauthority到配置文件并将容器显示映射到我的显示器)一度但不会有第二次。看来我需要使用的应用程序需要打开多个窗口,因此不起作用。

我使用以下脚本打开远程主机上的docker容器

#!/bin/bash

if [ $# -ne 1 ]; then
    echo "Usage: $0 container"
    exit 1
fi

nvidia-smi > /dev/null 2>&1
if [ $? -ne 0 ]; then
    echo "##########################################"
    echo ""
    echo "Nvidia Display driver not installed"
    echo "You will not be able to run the CUDA container"
    echo ""
    echo "##########################################"
    VAR_DRIVER="TRUE"
fi

VAR_CONTAINER=$1
VAR_ARCH=$(uname -i | sed 's/_/-/g')
VAR_NVLIB=$(ldconfig -p | grep libnvcuvid.so | grep -m 1 ${VAR_ARCH} | cut -d "=" -f2 | sed 's/>//g')
VAR_NVPATH=$(dirname ${VAR_NVLIB})
VAR_DOCKER_VOL="-v /dev/bus/usb:/dev/bus/usb -v /home/${USER}/.qnx/license:/root/.qnx/license -v ${PWD}/display/socket:/tmp/.X11-unix -v ${PWD}/display/Xauthority:/root/.Xauthority"

#if [ -z ${VAR_DRIVER} ]; then
 #  VAR_DOCKER_VOL=${VAR_DOCKER_VOL}" -v "${VAR_NVPATH}":/usr/lib/nvidia"
#fi

CONTAINER_DISPLAY="0"
CONTAINER_HOSTNAME="docker_host"

mkdir -p display/socket
touch display/Xauthority

DISPLAY_NUMBER=$(echo $DISPLAY | cut -d. -f1 | cut -d: -f2)

AUTH_COOKIE=$(xauth list | grep "^$(hostname)/unix:${DISPLAY_NUMBER} " | awk '{print $3}')
xauth -f display/Xauthority add ${CONTAINER_HOSTNAME}/unix:${CONTAINER_DISPLAY} MIT-MAGIC-COOKIE-1 ${AUTH_COOKIE}

socat TCP4:localhost:60${DISPLAY_NUMBER} UNIX-LISTEN:display/socket/X${CONTAINER_DISPLAY} &

echo "Connecting docker display "${CONTAINER_HOSTNAME}":"${CONTAINER_DISPLAY}" to local display "$(hostname)":"${DISPLAY_NUMBER}
echo "Moving local Xauthority Cookie "${AUTH_COOKIE}" in "${PWD}"/display/Xauthority to /root/.Xauthority in docker container"

docker run -it --rm  -e DISPLAY=:${CONTAINER_DISPLAY} \
       ${VAR_DOCKER_VOL} \
       --hostname ${CONTAINER_HOSTNAME} \
       --shm-size 2g \
       --runtime=nvidia \
       -e NVIDIA_VISIBLE_DEVICES=all \
       -e NVIDIA_DRIVER_CAPABILITIES='compute,graphics,utility,video' \
       -e NVIDIA_REQUIRE_CUDA='cuda>=10.0 brand=tesla,driver>=384,driver<385 brand=tesla,driver>=410,driver<411' \
       ${VAR_CONTAINER} \
       /bin/bash
rm -r display

我大致按照以下步骤进行在远程服务器上的 Docker 容器中运行图形应用程序

尝试从 docker 中打开第二个 xterm 时出现的错误是

xterm: Xt error: Can't open display: :0

相关内容