Refactor Dockerfile and run script for improved GPU handling and environment variable management

This commit is contained in:
Даниил Грабарь
2026-05-19 16:26:05 +03:00
parent 836b03a7ee
commit 6228501581
2 changed files with 44 additions and 6 deletions
+44 -4
View File
@@ -1,22 +1,62 @@
#!/bin/bash
# Run the Webots container with X11 forwarding.
#
# Usage:
# ./run.sh — interactive shell
# ./run.sh ros2 launch iiwa_bringup webots_spawn.launch.py ...
# ./run.sh [--gpu nvidia|mesa|software] [CMD...]
#
# Examples:
# ./run.sh — software rendering (llvmpipe), по умолчанию
# ./run.sh --gpu mesa — Intel/AMD GPU через DRI (ноутбук без NVIDIA)
# ./run.sh --gpu nvidia — NVIDIA GPU rendering
# ./run.sh --gpu nvidia ros2 launch ... — NVIDIA GPU rendering + команда
set -e
IMAGE="${WEBOTS_IMAGE:-evilfisru/lwc:webots-jazzy}"
GPU_MODE="software"
# Parse --gpu flag
if [[ "${1}" == "--gpu" ]]; then
GPU_MODE="${2:?--gpu requires an argument: nvidia|mesa|software}"
shift 2
fi
# Allow local Docker processes to connect to the X server
xhost +local:docker > /dev/null
case "${GPU_MODE}" in
nvidia)
RENDER_FLAGS=(
--gpus all
-e NVIDIA_VISIBLE_DEVICES=all
-e NVIDIA_DRIVER_CAPABILITIES=graphics,utility,compute
)
;;
mesa)
# Intel/AMD integrated/discrete — Mesa через DRI, без NVIDIA toolkit
RENDER_FLAGS=(
--device /dev/dri
)
;;
software)
RENDER_FLAGS=(
-e LIBGL_ALWAYS_SOFTWARE=1
-e GALLIUM_DRIVER=llvmpipe
)
;;
*)
echo "Unknown --gpu value: '${GPU_MODE}'. Use 'nvidia', 'mesa' or 'software'." >&2
exit 1
;;
esac
docker run -it --rm \
--name ros-webots \
--network host \
-e USER=root \
-e DISPLAY="${DISPLAY}" \
-e QT_X11_NO_MITSHM=1 \
-e LIBGL_ALWAYS_SOFTWARE=1 \
-e GALLIUM_DRIVER=llvmpipe \
"${RENDER_FLAGS[@]}" \
-v /tmp/.X11-unix:/tmp/.X11-unix:rw \
"${IMAGE}" \
"$@"