如何将图像从私有注册表推送到 hub.docker.com?

How to push image from private registry to hub.docker.com?

我正在将项目从私有注册表迁移到 hub.docker.com,但我的计算机上没有所有标记的图像。

我可以通过 SSH 访问注册表机器。

问题

如何将我的所有注册表映像推送到 hub.docker.com?

我认为唯一的方法是将它们全部拉出,然后重新标记它们并推送到 hub.docker.com

您可以使用类似以下内容的脚本:

for repository in $(curl -s http://localhost:5000/v2/_catalog | jq -r '.repositories[]'); do
  for image in $(curl -s http://localhost:5000/v2/${repository}/tags/list | jq -r '(.name + ":" + .tags[])')
    docker image pull localhost:5000/${image}
    docker image tag localhost:5000/${image} <YOUR_HUB_PREFIX>/${image}
    docker image push <YOUR_HUB_PREFIX>/${image}
    # if you need some cleanup
    docker image rm localhost:5000/${image} <YOUR_HUB_PREFIX>/${image}
  done
done

通过 SSH 访问您的注册表机器,使用 docker login 登录您的 Docker Hub 帐户,为您的图像添加一个指向 Docker Hub docker tag my_own_registry.com/image:tag user/image:tag 然后使用 docker push user/image:tag.

推送新标签

@zigarn 脚本自动执行此作业。

编辑:您评论说您的带宽不好,那么您可以通过 ssh 访问您的注册表机器,使用 docker save 保存您的图像,然后将其复制到您的机器并通过 [=14= 加载它] 最后将其推送到 Docker Hub,如上所述。