#!/usr/bin/env bash # # Copyright (C) 2018 Open Source Robotics Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # # Runs a docker container with the image created by build.bash # Requires: # docker # nvidia-docker # an X server # Recommended: # A joystick mounted to /dev/input/js0 or /dev/input/js1 if [ $# -lt 1 ] then echo "Usage: $0 <docker image> [<dir with workspace> ...]" exit 1 fi #IMG=$(basename $1) IMG=$1 ARGS=("$@") # Make sure processes in the container can connect to the x server # Necessary so gazebo can create a context for OpenGL rendering (even headless) XAUTH=/tmp/.docker.xauth if [ ! -f $XAUTH ] then xauth_list=$(xauth nlist $DISPLAY) xauth_list=$(sed -e 's/^..../ffff/' <<< "$xauth_list") if [ ! -z "$xauth_list" ] then echo "$xauth_list" | xauth -f $XAUTH nmerge - else touch $XAUTH fi chmod a+r $XAUTH fi DOCKER_OPTS= # Get the current version of docker-ce # Strip leading stuff before the version number so it can be compared DOCKER_VER=$(dpkg-query -f='${Version}' --show docker-ce | sed 's/[0-9]://') if dpkg --compare-versions 19.03 gt "$DOCKER_VER" then echo "Docker version is less than 19.03, using nvidia-docker2 runtime" if ! dpkg --list | grep nvidia-docker2 then echo "Please either update docker-ce to a version greater than 19.03 or install nvidia-docker2" exit 1 fi DOCKER_OPTS="$DOCKER_OPTS --runtime=nvidia" else DOCKER_OPTS="$DOCKER_OPTS --gpus all" fi # Share your vim settings. VIMRC=~/.vimrc if [ -f $VIMRC ] then DOCKER_OPTS="$DOCKER_OPTS -v $VIMRC:/home/developer/.vimrc:ro" fi # Prevent executing "docker run" when xauth failed. if [ ! -f $XAUTH ] then echo "[$XAUTH] was not properly created. Exiting..." exit 1 fi # Mount extra volumes if needed. # E.g.: # -v "/opt/sublime_text:/opt/sublime_text" \ # Developer note: If you are running docker in cloudsim then make sure to add # -e IGN_PARTITION=subt to the following command. docker run -it \ -e DISPLAY \ -e QT_X11_NO_MITSHM=1 \ -e XAUTHORITY=$XAUTH \ -v "$XAUTH:$XAUTH" \ -v "/tmp/.X11-unix:/tmp/.X11-unix" \ -v "/etc/localtime:/etc/localtime:ro" \ -v "/dev/input:/dev/input" \ --network host \ --rm \ --privileged \ --security-opt seccomp=unconfined \ $DOCKER_OPTS \ $IMG \ ${@:2}