-
Notifications
You must be signed in to change notification settings - Fork 0
/
ariac2019_docker.sh
executable file
·104 lines (95 loc) · 2.85 KB
/
ariac2019_docker.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/bin/bash
DOCKER_IMG="sumanthnirmal/ros-melodic-gazebo9:ariac2019"
DOCKER_CONATINER_NAME="ariac2019_docker_container"
HOME_DIRECTORY="/home/$USER/ariac2019_home"
docker_start() {
# if ariac2019_home directory presents
if [ -d "$HOME_DIRECTORY" ]; then
# 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 :0 | sed -e 's/^..../ffff/')
if [ ! -z "$xauth_list" ]
then
echo "$xauth_list | xauth -f $XAUTH nmerge -"
else
touch $XAUTH
fi
chmod a+r $XAUTH
fi
# docker run
CONTAINER_ID=$(docker run -it --detach \
-v "/dev/dri:/dev/dri" \
-v "/dev/shm:/dev/shm" \
-v "/tmp/.X11-unix:/tmp/.X11-unix:rw" \
-v /home/$USER/ariac2019_home:/home/developer/ \
-v "/home/$USER/.ssh:/home/developer/.ssh" \
-e DISPLAY=$DISPLAY \
-e QT_X11_NO_MITSHM=1 \
-e XAUTHORITY=$XAUTH \
-v "$XAUTH:$XAUTH" \
-v "/etc/localtime:/etc/localtime:ro" \
-u "$(id -u)" \
--net=host \
--privileged \
--rm \
--runtime=nvidia \
--security-opt seccomp=unconfined \
--name $DOCKER_CONATINER_NAME \
$DOCKER_IMG)
# X forwarding
host=$(docker inspect --format='{{ .Config.Hostname }}' $DOCKER_CONATINER_NAME)
xhost +local:$host
# check if the docker is running
if [ "$(docker inspect --format='{{.State.Running}}' $CONTAINER_ID)" = "true" ]; then
echo "$DOCKER_IMG startup completed
$DOCKER_IMG has been started, enter using: bash ariac2019_docker.sh enter"
else
echo "ERROR: Failed to start $DOCKER_IMG"
fi
else
echo "ariac2019_home directory is not available
create a directory 'ariac2019_home' in '/home/$USER'"
fi
}
docker_enter() {
# docker exec
docker exec -ti -u "$(id -u)" $DOCKER_CONATINER_NAME bash -li
}
docker_stop() {
docker stop -t 0 $DOCKER_CONATINER_NAME
}
if [ "$1" = "start" ]; then
# if container is already Running
if docker ps --format '{{.Names}}' | grep -q $DOCKER_CONATINER_NAME; then
# if requested to restart
if [ "$2" = "-f" ]; then
# stop the container
docker_stop
else
echo "ERROR: $DOCKER_IMG is already running.
Use bash ariac2019_docker.sh enter to enter
or
Use bash ariac2019_docker.sh start -f to restart."
# exit from here
exit
fi
fi
echo "Starting $DOCKER_IMG container"
docker_start
elif [ "$1" = "enter" ]
then
docker_enter
elif [ "$1" = "stop" ]
then
docker_stop
else
echo "Options:
--help Show this message and exit.
Commands:
start Start ariac2019 docker environment.
enter Enter ariac2019 docker environment.
stop Stop ariac2019 docker environment."
fi