1
1
# Based on: https://github.com/concourse/docker-image-resource/blob/master/assets/common.sh
2
2
3
+ LOG_FILE=${LOG_FILE:-/ tmp/ docker.log}
4
+ SKIP_PRIVILEGED=${SKIP_PRIVILEGED:- false}
5
+ STARTUP_TIMEOUT=${STARTUP_TIMEOUT:- 120}
6
+
3
7
sanitize_cgroups () {
4
8
mkdir -p /sys/fs/cgroup
5
9
mountpoint -q /sys/fs/cgroup || \
@@ -13,7 +17,7 @@ sanitize_cgroups() {
13
17
continue
14
18
fi
15
19
16
- grouping=" $( cat /proc/self/cgroup | cut -d: -f2 | grep " \\ <$sys \\ >" ) "
20
+ grouping=" $( cat /proc/self/cgroup | cut -d: -f2 | grep " \\ <$sys \\ >" ) " || true
17
21
if [ -z " $grouping " ]; then
18
22
# subsystem not mounted anywhere; mount it on its own
19
23
grouping=" $sys "
@@ -38,44 +42,63 @@ sanitize_cgroups() {
38
42
ln -s " $mountpoint " " /sys/fs/cgroup/$sys "
39
43
fi
40
44
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
41
50
}
42
51
43
52
start_docker () {
44
53
mkdir -p /var/log
45
54
mkdir -p /var/run
46
55
47
- sanitize_cgroups
56
+ if [ " $SKIP_PRIVILEGED " = " false" ]; then
57
+ sanitize_cgroups
48
58
49
- # check for /proc/sys being mounted readonly, as systemd does
50
- if grep ' /proc/sys\s\+\w\+\s\+ro,' /proc/mounts > /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,' /proc/mounts > /dev/null; then
61
+ mount -o remount,rw /proc/sys
62
+ fi
52
63
fi
53
64
54
- local server_args=" "
65
+ local mtu=$( cat /sys/class/net/$( ip route get 8.8.8.8| awk ' { print $5 }' ) /mtu)
66
+ local server_args=" --mtu ${mtu} "
67
+ local registry=" "
55
68
56
- for registry in $1 ; do
69
+ server_args=" ${server_args} "
70
+
71
+ for registry in $3 ; do
57
72
server_args=" ${server_args} --insecure-registry ${registry} "
58
73
done
59
74
60
- if [ -n " $2 " ]; then
61
- server_args=" ${server_args} --registry-mirror= $2 "
75
+ if [ -n " $4 " ]; then
76
+ server_args=" ${server_args} --registry-mirror $4 "
62
77
fi
63
78
64
- if [ -n " $3 " ] ; then
65
- server_args= " ${server_args} -g= $3 "
66
- fi
79
+ try_start () {
80
+ dockerd --data-root /scratch/docker ${server_args} > $LOG_FILE 2>&1 &
81
+ echo $! > /tmp/docker.pid
67
82
68
- dockerd --data-root /scratch/docker ${server_args} > /tmp/docker.log 2>&1 &
69
- echo $! > /tmp/docker.pid
83
+ sleep 1
70
84
71
- trap stop_docker EXIT
85
+ echo waiting for docker to come up...
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
+ }
72
93
73
- sleep 1
94
+ export server_args LOG_FILE
95
+ declare -fx try_start
96
+ trap stop_docker EXIT
74
97
75
- until docker info > /dev/null 2>&1 ; do
76
- echo waiting for docker to come up.. .
77
- sleep 1
78
- done
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
79
102
}
80
103
81
104
stop_docker () {
@@ -85,5 +108,5 @@ stop_docker() {
85
108
fi
86
109
87
110
kill -TERM $pid
88
- wait $pid
89
111
}
112
+
0 commit comments