@@ -367,7 +367,7 @@ dockerd_start="AZURE_DNS_AUTO_DETECTION=${AZURE_DNS_AUTO_DETECTION} DOCKER_DEFAU
367
367
find /run /var/run -iname 'docker*.pid' -delete || :
368
368
find /run /var/run -iname 'container*.pid' -delete || :
369
369
370
- ## Dind wrapper script from docker team, adapted to a function
370
+ # -- Start: dind wrapper script --
371
371
# Maintained: https://github.com/moby/moby/blob/master/hack/dind
372
372
373
373
export container=docker
@@ -384,31 +384,52 @@ dockerd_start="AZURE_DNS_AUTO_DETECTION=${AZURE_DNS_AUTO_DETECTION} DOCKER_DEFAU
384
384
mount -t tmpfs none /tmp
385
385
fi
386
386
387
- # cgroup v2: enable nesting
388
- if [ -f /sys/fs/cgroup/cgroup.controllers ]; then
389
- # move the processes from the root group to the /init group,
390
- # otherwise writing subtree_control fails with EBUSY.
391
- # An error during moving non-existent process (i.e., "cat") is ignored.
392
- mkdir -p /sys/fs/cgroup/init
393
- xargs -rn1 < /sys/fs/cgroup/cgroup.procs > /sys/fs/cgroup/init/cgroup.procs || :
394
- # enable controllers
395
- sed -e 's/ / +/g' -e 's/^/+/' < /sys/fs/cgroup/cgroup.controllers \
396
- > /sys/fs/cgroup/cgroup.subtree_control
397
- fi
398
- ## Dind wrapper over.
387
+ set_cgroup_nesting()
388
+ {
389
+ # cgroup v2: enable nesting
390
+ if [ -f /sys/fs/cgroup/cgroup.controllers ]; then
391
+ # move the processes from the root group to the /init group,
392
+ # otherwise writing subtree_control fails with EBUSY.
393
+ # An error during moving non-existent process (i.e., "cat") is ignored.
394
+ mkdir -p /sys/fs/cgroup/init
395
+ xargs -rn1 < /sys/fs/cgroup/cgroup.procs > /sys/fs/cgroup/init/cgroup.procs || :
396
+ # enable controllers
397
+ sed -e 's/ / +/g' -e 's/^/+/' < /sys/fs/cgroup/cgroup.controllers \
398
+ > /sys/fs/cgroup/cgroup.subtree_control
399
+ fi
400
+ }
401
+
402
+ # Set cgroup nesting, retrying if necessary
403
+ retry_cgroup_nesting=0
404
+
405
+ until [ "${retry_cgroup_nesting}" -eq "5" ];
406
+ do
407
+ set +e
408
+ set_cgroup_nesting
409
+
410
+ if [ $? -ne 0 ]; then
411
+ echo "(*) cgroup v2: Failed to enable nesting, retrying..."
412
+ else
413
+ break
414
+ fi
415
+
416
+ retry_cgroup_nesting=`expr $retry_cgroup_nesting + 1`
417
+ set -e
418
+ done
419
+
420
+ # -- End: dind wrapper script --
399
421
400
422
# Handle DNS
401
423
set +e
402
- cat /etc/resolv.conf | grep -i 'internal.cloudapp.net'
403
- if [ $? -eq 0 ] && [ "${AZURE_DNS_AUTO_DETECTION}" = "true" ]
404
- then
405
- echo "Setting dockerd Azure DNS."
406
- CUSTOMDNS="--dns 168.63.129.16"
407
- else
408
- echo "Not setting dockerd DNS manually."
409
- CUSTOMDNS=""
410
- fi
411
-
424
+ cat /etc/resolv.conf | grep -i 'internal.cloudapp.net' > /dev/null 2>&1
425
+ if [ $? -eq 0 ] && [ "${AZURE_DNS_AUTO_DETECTION}" = "true" ]
426
+ then
427
+ echo "Setting dockerd Azure DNS."
428
+ CUSTOMDNS="--dns 168.63.129.16"
429
+ else
430
+ echo "Not setting dockerd DNS manually."
431
+ CUSTOMDNS=""
432
+ fi
412
433
set -e
413
434
414
435
if [ -z "$DOCKER_DEFAULT_ADDRESS_POOL" ]
@@ -423,12 +444,35 @@ dockerd_start="AZURE_DNS_AUTO_DETECTION=${AZURE_DNS_AUTO_DETECTION} DOCKER_DEFAU
423
444
INNEREOF
424
445
)"
425
446
426
- # Start using sudo if not invoked as root
427
- if [ "$(id -u)" -ne 0 ]; then
428
- sudo /bin/sh -c "${dockerd_start}"
429
- else
430
- eval "${dockerd_start}"
431
- fi
447
+ retry_docker_start_count=0
448
+ docker_ok="false"
449
+
450
+ until [ "${docker_ok}" = "true" ] || [ "${retry_docker_start_count}" -eq "5" ];
451
+ do
452
+ # Start using sudo if not invoked as root
453
+ if [ "$(id -u)" -ne 0 ]; then
454
+ sudo /bin/sh -c "${dockerd_start}"
455
+ else
456
+ eval "${dockerd_start}"
457
+ fi
458
+
459
+ retry_count=0
460
+ until [ "${docker_ok}" = "true" ] || [ "${retry_count}" -eq "5" ];
461
+ do
462
+ sleep 1s
463
+ set +e
464
+ docker info > /dev/null 2>&1 && docker_ok="true"
465
+ set -e
466
+
467
+ retry_count=`expr $retry_count + 1`
468
+ done
469
+
470
+ if [ "${docker_ok}" != "true" ]; then
471
+ echo "(*) Failed to start docker, retrying..."
472
+ fi
473
+
474
+ retry_docker_start_count=`expr $retry_docker_start_count + 1`
475
+ done
432
476
433
477
# Execute whatever commands were passed in (if any). This allows us
434
478
# to set this script to ENTRYPOINT while still executing the default CMD.
0 commit comments