Xmingを実行しているローカルのWindowsシステムで、PuTTYを介してアクセスできるリモートシステム(Ubuntu 16.04を実行)のDockerコンテナで実行されるグラフィックアプリケーションを使用する必要があります。
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で2番目のxtermを開こうとしたときに発生するエラーは次のとおりです。
xterm: Xt error: Can't open display: :0