From be9c045e918704af1f0556ef1eb84b7ac0ed2963 Mon Sep 17 00:00:00 2001 From: yankay Date: Sun, 12 Sep 2021 15:43:21 +0800 Subject: [PATCH] support docker hub rate limit --- scripts/sync-to-jp.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/scripts/sync-to-jp.py b/scripts/sync-to-jp.py index 65d8282..4a2759b 100644 --- a/scripts/sync-to-jp.py +++ b/scripts/sync-to-jp.py @@ -27,6 +27,8 @@ INTERNAL_NETWORK = { REGISTRY_PASSWORD = os.environ["REGISTRY_PASSWORD"] DELTA_MODE = os.environ.get("DELTA_MODE") DRY_RUN = os.environ.get("DRY_RUN") +DOCKER_IO_USER = os.environ.get("DOCKER_IO_USER") +DOCKER_IO_PASS = os.environ.get("DOCKER_IO_PASS") SKOPEO_CMD = "docker run --rm quay.io/containers/skopeo:latest" # SKOPEO_CMD = "skopeo" # RUN without docker @@ -50,7 +52,10 @@ def __dest_img(src_img): def skepo_full_sync(src_img): dest_img = __dest_img(src_img) dest_img = "/".join(dest_img.split("/")[:-1]) - cmd = SKOPEO_CMD + " sync --src docker --dest docker --dest-tls-verify=false --dest-creds root:%s -f oci %s %s" %(REGISTRY_PASSWORD,src_img,dest_img) + src_auth = "" + if 'docker.io' in src_img and DOCKER_IO_USER: + src_auth = " --src-creds %s:%s " % (DOCKER_IO_USER,DOCKER_IO_PASS) + cmd = SKOPEO_CMD + " sync --src docker --dest docker %s --dest-tls-verify=false --dest-creds root:%s -f oci %s %s" %(src_auth,REGISTRY_PASSWORD,src_img,dest_img) __run_cmd(cmd) def __parse_tag(output): @@ -62,11 +67,15 @@ def __parse_tag(output): def skepo_delta_sync(src_img): dest_img = __dest_img(src_img) - cmd = "skopeo list-tags docker://" + src_img + src_auth ='' + if 'docker.io' in src_img and DOCKER_IO_USER: + src_auth = " --creds %s:%s " % (DOCKER_IO_USER,DOCKER_IO_PASS) + cmd = "skopeo list-tags %s docker://%s" % (src_auth,src_img) + print(cmd) result = subprocess.run(cmd, shell=True,stdout=subprocess.PIPE) src_tags = __parse_tag(result.stdout) cmd = "skopeo list-tags --creds root:%s --tls-verify=false docker://%s" %(REGISTRY_PASSWORD,dest_img) - # print(cmd) + print(cmd) result = subprocess.run(cmd, shell=True,stdout=subprocess.PIPE) dest_tags = __parse_tag(result.stdout) need_to_sync = set(src_tags) - set(dest_tags) @@ -76,7 +85,10 @@ def skepo_delta_sync(src_img): # print(need_to_sync) if len(need_to_sync) == 0: if 'latest' in src_tags: - cmd = SKOPEO_CMD + " copy --dest-creds root:%s --dest-tls-verify=false -f oci docker://%s:latest docker://%s:latest" %(REGISTRY_PASSWORD,src_img,dest_img) + src_auth ='' + if 'docker.io' in src_img and DOCKER_IO_USER: + src_auth = " --src-creds %s:%s " % (DOCKER_IO_USER,DOCKER_IO_PASS) + cmd = SKOPEO_CMD + " copy %s --dest-creds root:%s --dest-tls-verify=false -f oci docker://%s:latest docker://%s:latest" %(src_auth,REGISTRY_PASSWORD,src_img,dest_img) __run_cmd(cmd) else: skepo_full_sync(src_img)