11#  Based on: https://github.com/concourse/docker-image-resource/blob/master/assets/common.sh
22
3+ DOCKER_LOG_FILE=${DOCKER_LOG_FILE:-/ tmp/ docker.log} 
4+ SKIP_PRIVILEGED=${SKIP_PRIVILEGED:- false} 
5+ STARTUP_TIMEOUT=${STARTUP_TIMEOUT:- 120} 
6+ 
37sanitize_cgroups () {
48  mkdir -p /sys/fs/cgroup
59  mountpoint -q /sys/fs/cgroup ||  \
@@ -13,7 +17,7 @@ sanitize_cgroups() {
1317      continue 
1418    fi 
1519
16-     grouping=" $( cat /proc/self/cgroup |  cut -d: -f2 |  grep " \\ <$sys \\ >" ) " 
20+     grouping=" $( cat /proc/self/cgroup |  cut -d: -f2 |  grep " \\ <$sys \\ >" ) "   ||   true 
1721    if  [ -z  " $grouping " ;  then 
1822      #  subsystem not mounted anywhere; mount it on its own
1923      grouping=" $sys " 
@@ -38,42 +42,63 @@ sanitize_cgroups() {
3842      ln -s " $mountpoint " " /sys/fs/cgroup/$sys " 
3943    fi 
4044  done 
45+ 
46+   if  !  test  -e /sys/fs/cgroup/systemd ;  then 
47+     mkdir /sys/fs/cgroup/systemd
48+     mount -t cgroup -o none,name=systemd none /sys/fs/cgroup/systemd
49+   fi 
4150}
4251
4352start_docker () {
4453  mkdir -p /var/log
4554  mkdir -p /var/run
4655
47-   sanitize_cgroups
56+   if  [ " $SKIP_PRIVILEGED " =  " false" ;  then 
57+     sanitize_cgroups
4858
49-   #  check for /proc/sys being mounted readonly, as systemd does
50-   if  grep ' /proc/sys\s\+\w\+\s\+ro,' > /dev/null;  then 
51-     mount -o remount,rw /proc/sys
59+     #  check for /proc/sys being mounted readonly, as systemd does
60+     if  grep ' /proc/sys\s\+\w\+\s\+ro,' > /dev/null;  then 
61+       mount -o remount,rw /proc/sys
62+     fi 
5263  fi 
5364
54-   local  server_args=" " 
65+   local  mtu=$( cat /sys/class/net/$( ip route get 8.8.8.8| awk ' { print $5 }' ) ) 
66+   local  server_args=" --mtu ${mtu} " 
67+   local  registry=" " 
5568
56-   for  registry  in  $1 ;  do 
69+   server_args=" ${server_args} " 
70+ 
71+   for  registry  in  $3 ;  do 
5772    server_args=" ${server_args}  --insecure-registry ${registry} " 
5873  done 
5974
60-   if  [ -n  " $2 " ;  then 
61-     server_args=" ${server_args}  --registry-mirror=$2 " 
62-   fi 
63- 
64-   if  [ -n  " $3 " ;  then 
65-     server_args=" ${server_args}  -g=$3 " 
75+   if  [ -n  " $4 " ;  then 
76+     server_args=" ${server_args}  --registry-mirror $4 " 
6677  fi 
6778
68-   dockerd --data-root /scratch/docker ${server_args}  > /tmp/docker.log 2>&1  & 
69-   echo  $!  >  /tmp/docker.pid
79+   try_start () {
80+     dockerd --data-root /scratch/docker ${server_args}  > $DOCKER_LOG_FILE  2>&1  & 
81+     echo  $!  >  /tmp/docker.pid
7082
71-   sleep 1
83+      sleep 1
7284
73-   until  docker info > /dev/null 2>&1 ;  do 
7485    echo  waiting for  docker to come up...
75-     sleep 1
76-   done 
86+     until  docker info > /dev/null 2>&1 ;  do 
87+       sleep 1
88+       if  !  kill  -0 " $( cat /tmp/docker.pid) " 2> /dev/null;  then 
89+         return  1
90+       fi 
91+     done 
92+   }
93+ 
94+   export  server_args DOCKER_LOG_FILE
95+   declare  -fx try_start
96+   trap  stop_docker EXIT
97+ 
98+   if  !  timeout ${STARTUP_TIMEOUT}  bash -ce ' while true; do try_start && break; done' ;  then 
99+     echo  Docker failed to start within ${STARTUP_TIMEOUT}  seconds.
100+     return  1
101+   fi 
77102}
78103
79104stop_docker () {
@@ -83,5 +108,5 @@ stop_docker() {
83108  fi 
84109
85110  kill  -TERM $pid 
86-   wait  $pid 
87111}
112+ 
0 commit comments