diff --git a/tools/build-docker-image b/tools/build-docker-image
index 0f698af39ce1a41fd06870b1d2a3468acc29c4d6..9bd1d42734d95204c0ab4d2f8a37f5635ba53124 100755
--- a/tools/build-docker-image
+++ b/tools/build-docker-image
@@ -13,6 +13,7 @@ NAMESPACE=kollaglue
 PREFIX=centos-rdo-
 TAG=$(git rev-parse --short HEAD)
 RELEASE_TAG=latest
+MAX_TRIES=1
 
 usage () {
     cat <<EOF
@@ -30,13 +31,14 @@ Options:
 --pull, -u
 --release
 --no-use-released-parent
+--retry <number_of_retries>
 EOF
 }
 
 [ -f $TOPDIR/.buildconf ] && . $TOPDIR/.buildconf
 [ -f $IMGDIR/.buildconf ] && . $IMGDIR/.buildconf
 
-ARGS=$(getopt -o hr:n:t:pfuN -l help,prefix:,namespace:,push,pull,private-registry:,release,tag:,force-rm,no-cache,no-use-released-parent -- "$@") || { usage >&2; exit 2; }
+ARGS=$(getopt -o hr:n:t:pfuN -l help,prefix:,namespace:,push,pull,private-registry:,release,tag:,force-rm,no-cache,no-use-released-parent,retry: -- "$@") || { usage >&2; exit 2; }
 
 eval set -- "$ARGS"
 
@@ -88,6 +90,11 @@ while :; do
                 USE_CURRENT_TAG=1
                 ;;
 
+    (--retry)
+                shift
+                MAX_TRIES=$((MAX_TRIES + $1))
+                ;;
+
     (--)        break
                 ;;
 
@@ -142,10 +149,21 @@ sed -i.bak "s|%%KOLLA_NAMESPACE%%|${NAMESPACE}|g" $TMPDIR/Dockerfile
 sed -i.bak "s|%%KOLLA_PREFIX%%|${PREFIX}|g" $TMPDIR/Dockerfile
 sed -i.bak "s|%%KOLLA_TAG%%|${PARENT_TAG}|g" $TMPDIR/Dockerfile
 
+TRY=0
+while [ $((MAX_TRIES - 1)) -gt $TRY ]; do
+    if docker build ${BUILDFLAGS} -t "$FULLIMAGE" $TMPDIR; then
+        break
+    else
+        echo "WARNING: failed to build $FULLIMAGE, retrying..."
+        TRY=$((TRY + 1))
+    fi
+done
+
 if ! docker build ${BUILDFLAGS} -t "$FULLIMAGE" $TMPDIR; then
     echo "ERROR: failed to build $FULLIMAGE"
     exit 1
 fi
+
 rm -rf $TMPDIR
 
 echo "Built: $FULLIMAGE"