标签: docker-registry

从私有注册表中删除标记的 Docker 镜像

如何从私有 Docker 注册表中的映像中删除错误添加的标签?选项 -rmi 似乎不适用于 Docker 1.9.1 中的远程图像。

user@ubuntu-user:~$ docker --version  
Docker version 1.9.1, build a34a1d5

user@ubuntu-user:~$ docker search myregistry:5000/user/image
NAME                                                                     
myregistry:5000/user/image:20160119                                         
myregistry:5000/user/image:20160119-20160120        

user@ubuntu-user:~$ docker rmi myregistry:5000/user/image:20160119-20160120
Error response from daemon: could not find image: no such id: myregistry:5000/user/image:20160119-20160120
Error: failed to remove images: [myregistry:5000/user/image:20160119-20160120]
Run Code Online (Sandbox Code Playgroud)

docker docker-registry

11
推荐指数
1
解决办法
4万
查看次数

使用 webhooks 自动更新 Docker 容器

我创建了一个 Github 存储库和一个 Docker 存储库。两者协同工作非常好:当我将新版本的 Dockerfile 推送到 Github 时,会在 Docker 存储库中自动构建一个新映像。

现在,我希望在(重新)构建基本映像时自动更新我正在运行的容器。

如何使用 Docker repos webhooks 实现它?

deployment docker docker-registry

10
推荐指数
1
解决办法
6983
查看次数

从私有 Docker 注册表中删除标签的简单方法?

我有一个私有 Docker 注册表 v2.6.0,其中包含一个映像上的几个标记版本:

foo/bar:1
foo/bar:1_keep    (same image as 1)
foo/bar:2
foo/bar:3
foo/bar:latest    (same image as 3)
Run Code Online (Sandbox Code Playgroud)

我想删除单个标签而不必删除图像。因此,如果我删除标签 2,则可以删除该图像,因为没有其他内容引用它。但是如果我删除标签 1,只有那个标签应该去,而不是图像。

这表明 API 请求是这样的:

DELETE http://repo/v2/foo/bar/tags/1
Run Code Online (Sandbox Code Playgroud)

但这给了我一个 404。相反,我必须删除清单,这意味着做所有检查它没有被另一个标签使用的工作。

我查看了https://github.com/fraunhoferfokus/deckschrubber的来源,它似乎并没有在检查删除手稿是否安全时遇到麻烦。我错过了什么吗?

有没有更好的方法来做到这一点?如果没有,为什么不,它可能会被修复?

docker docker-registry

9
推荐指数
1
解决办法
2万
查看次数

如何使用 shell 脚本从 docker hub 删除超过 x 天的 docker 镜像

如何使用 shell 脚本从 docker hub 删除 docker 镜像。

我想从 docker hub 中删除私人 docker hub 帐户过去 50 天之前的所有映像。

有任何想法吗?通过 Jenkins 或 bash 终端创建和运行此 shell 脚本时要使用哪些工具。

我正在考虑使用curl来实现我的目标。

shell-scripting docker-registry

8
推荐指数
1
解决办法
4818
查看次数

如何估计AWS ECR中docker镜像使用的存储和流量?

我正在尝试估计使用 AWS ECR 的每月费用。它将包括:传出流量成本(下载图像)和存储成本(将图像存储在 ECR 中)。

让我们假设:

  • 我们正在使用 Mono 构建一些 Web 服务(基本 docker 镜像大小为 500Mb);
  • 我们的 CI&CD 服务器每月构建映像并将其推送到 ECR 300 次。为简单起见,未删除旧图像;
  • 我们编译的代码在基础镜像中添加了 40Mb 的附加层;
  • 我们每月从 AWS 下载图像 60 次;

第一个问题:如何估算每月的存储量?什么等式是正确的?

每月_Vol_1 = 500+40*300;- 基本图像仅存储一次

每月_Vol_2 = (500+40)*300; - 每个图像都包含基础图像

第二个问题是:如何估算AWS的每月流量?假设下载图像的主机不会删除现有数据。

每月流量_1 = (500+40)*60; -每次下载基础镜像和附加层时

每月流量_2 = 500+40*60;-仅下载第一个图像的基础图像。仅下载应用程序更新

Monthly_Traf_3 = 40*60; - 基础镜像不是从AWS ECR下载的,而是从docker hub下载的

更新:

我在 9 月份将 2 张图像上传到 AWS ECR,并在 2 个月后检查了账单信息。我发现了什么:

仅存储 2 张图像(不进行传输)每月花费我 0.04 美元。根据 AWS ECR 定价(每 1Gb …

traffic storage docker docker-registry amazon-ecr

7
推荐指数
0
解决办法
2349
查看次数

GCP:无法从 Compute Engine 访问 Container Registry

我在gcr.io/my-project/my-image:latest. 在同一个项目中,我创建了一个基于 COS(Container-Optimized OS)的 Google Compute Engine 实例,具有对 Google Storage 的读访问权限(默认启用)。我还向其服务帐户授予了对 Google Storage 的读取权限。

但是,我无法从 GCE 实例中提取图像:

$docker pull gcr.io/my-project/my-image:latest
Error response from daemon: repository gcr.io/my-project/my-image not found: does not exist or no pull access
Run Code Online (Sandbox Code Playgroud)

医生说

要从 Compute Engine 实例中提取私有 Docker 映像,请确保您的实例对映像的存储桶具有读取权限。如果您的实例和图像存储桶位于同一个 Google Cloud Platform 项目中,则默认情况下此配置正确。

docker google-compute-engine google-cloud-storage google-cloud-platform docker-registry

5
推荐指数
2
解决办法
3819
查看次数

Docker 私有注册表 - 删除了所有映像,但仍显示在目录中

按照官方文档(https://docs.docker.com/registry/spec/api/#deleting-an-image),我已经能够成功删除图像。正如预期的那样,删除后,图像无法再被拉取,也无法通过 API 调用其清单。

我觉得我已经完成了最困难的部分,但问题是/v2/_catalog删除完成后,存储库仍然列在下面。我正在尝试完全清除注册表。

这是我的注册表撰写文件:

registry:
  image: registry:2.5.2
  container_name: registry-test
  ports:
    - 5007:5000
  environment:
    REGISTRY_STORAGE: s3
    REGISTRY_HTTP_TLS_CERTIFICATE: /etc/cert.crt
    REGISTRY_HTTP_TLS_KEY: /etc/cert.key
    REGISTRY_STORAGE_S3_ACCESSKEY: ******
    REGISTRY_STORAGE_S3_SECRETKEY: ******
    REGISTRY_STORAGE_S3_REGION: us-west-1
    REGISTRY_STORAGE_S3_BUCKET: ******
    REGISTRY_STORAGE_S3_SECURE: "true"
    REGISTRY_STORAGE_DELETE_ENABLED: "true"
  volumes:
    - /dockerdata/volumes/registry-test/etc/cert.crt:/etc/cert.crt
    - /dockerdata/volumes/registry-test/etc/cert.key:/etc/cert.key
  restart: unless-stopped
Run Code Online (Sandbox Code Playgroud)

这是我删除图像的高级方法:

  1. 收集图像摘要: HEAD https://myprivateregistry:5001/v2/myimage/manifests/mytag添加"Accept: application/vnd.docker.distribution.manifest.v2+json"到调用的标题中

  2. 该调用返回标头键Docker-Content-Digest,其值例如sha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd

  3. 使用步骤 2 中的值运行删除调用:DELETE https://myprivateregistry:5001/v2/myimage/manifests/sha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd

  4. 注册表API返回202 Accepted

  5. 手动运行垃圾收集:registry garbage-collect /etc/docker/registry/config.yml

  6. 垃圾收集器从磁盘中删除关联的 blob(此处省略日志,但它成功删除了 blob)

此时,我可以确认 blob 已从磁盘中完全删除,并且我无法再调用图像详细信息(如上面的步骤 1 所示),所以我认为我已经完成了。

但是,运行时:/v2/_catalog …

docker docker-registry

5
推荐指数
1
解决办法
7519
查看次数

为不同的 Docker 注册表配置“auth”和“credsStore”

我正在尝试为两个不同的注册表配置 Docker。(一个 ECR 和 docker.io)我需要ecr-login使用 simple 配置 ECR 1 和 docker.io auth,但我无法同时配置这些。它给出以下错误:

保存凭据时出错:存储凭据时出错 - 错误:退出状态 1,输出:not implemented

这是我的 ~/.docker/config.json

{
    "auths": {
            "https://index.docker.io/v1/": {
                    "auth": "BASE64-STRING"
            }
    },
    "credsStore": "ecr-login"
}
Run Code Online (Sandbox Code Playgroud)

为什么 Docker 在已经可用的credsStore情况下还要尝试使用它?auth

docker docker-registry amazon-ecr

5
推荐指数
1
解决办法
4407
查看次数

如何处理 GCP Container Registry 中的保留策略

GCP 容器注册表构建在 GCP Cloud Storage 之上,可以在那里设置相当复杂的保留策略。

然而,容器注册表中没有这样的功能,并且存储中的图像之间没有区别(所有图像文件名都是哈希值,并且位于同一存储桶的同一目录中),因此无法设置策略来保留仅单个图像的最后五个版本。

有谁知道是否可以为 GCP 中的图像设置更复杂的保留政策以及应该如何做?

google-cloud-storage google-cloud-platform docker-registry gcloud

3
推荐指数
1
解决办法
2729
查看次数