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
-2
View File
@@ -5,8 +5,6 @@ ARG BUILD_TYPE=release
ENV RMW_IMPLEMENTATION=rmw_cyclonedds_cpp ENV RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
ENV WEBOTS_HOME=/usr/local/webots ENV WEBOTS_HOME=/usr/local/webots
ENV LIBGL_ALWAYS_SOFTWARE=1
ENV GALLIUM_DRIVER=llvmpipe
# X11 utilities and Mesa software renderer # X11 utilities and Mesa software renderer
RUN apt-get update && apt-get install -y --no-install-recommends \ RUN apt-get update && apt-get install -y --no-install-recommends \
+44 -4
View File
@@ -1,22 +1,62 @@
#!/bin/bash #!/bin/bash
# Run the Webots container with X11 forwarding. # Run the Webots container with X11 forwarding.
#
# Usage: # Usage:
# ./run.sh — interactive shell # ./run.sh [--gpu nvidia|mesa|software] [CMD...]
# ./run.sh ros2 launch iiwa_bringup webots_spawn.launch.py ... #
# 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}" 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 # Allow local Docker processes to connect to the X server
xhost +local:docker > /dev/null 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 \ docker run -it --rm \
--name ros-webots \ --name ros-webots \
--network host \ --network host \
-e USER=root \ -e USER=root \
-e DISPLAY="${DISPLAY}" \ -e DISPLAY="${DISPLAY}" \
-e QT_X11_NO_MITSHM=1 \ -e QT_X11_NO_MITSHM=1 \
-e LIBGL_ALWAYS_SOFTWARE=1 \ "${RENDER_FLAGS[@]}" \
-e GALLIUM_DRIVER=llvmpipe \
-v /tmp/.X11-unix:/tmp/.X11-unix:rw \ -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
"${IMAGE}" \ "${IMAGE}" \
"$@" "$@"