如何从私有 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) 我创建了一个 Github 存储库和一个 Docker 存储库。两者协同工作非常好:当我将新版本的 Dockerfile 推送到 Github 时,会在 Docker 存储库中自动构建一个新映像。
现在,我希望在(重新)构建基本映像时自动更新我正在运行的容器。
如何使用 Docker repos webhooks 实现它?
我有一个私有 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的来源,它似乎并没有在检查删除手稿是否安全时遇到麻烦。我错过了什么吗?
有没有更好的方法来做到这一点?如果没有,为什么不,它可能会被修复?
如何使用 shell 脚本从 docker hub 删除 docker 镜像。
我想从 docker hub 中删除私人 docker hub 帐户过去 50 天之前的所有映像。
有任何想法吗?通过 Jenkins 或 bash 终端创建和运行此 shell 脚本时要使用哪些工具。
我正在考虑使用curl来实现我的目标。
我正在尝试估计使用 AWS ECR 的每月费用。它将包括:传出流量成本(下载图像)和存储成本(将图像存储在 ECR 中)。
让我们假设:
第一个问题:如何估算每月的存储量?什么等式是正确的?
每月_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 …
我在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
按照官方文档(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)
这是我删除图像的高级方法:
收集图像摘要:
HEAD https://myprivateregistry:5001/v2/myimage/manifests/mytag添加"Accept: application/vnd.docker.distribution.manifest.v2+json"到调用的标题中
该调用返回标头键Docker-Content-Digest,其值例如sha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd
使用步骤 2 中的值运行删除调用:DELETE https://myprivateregistry:5001/v2/myimage/manifests/sha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd
注册表API返回202 Accepted
手动运行垃圾收集:registry garbage-collect /etc/docker/registry/config.yml
垃圾收集器从磁盘中删除关联的 blob(此处省略日志,但它成功删除了 blob)
此时,我可以确认 blob 已从磁盘中完全删除,并且我无法再调用图像详细信息(如上面的步骤 1 所示),所以我认为我已经完成了。
但是,运行时:/v2/_catalog …
我正在尝试为两个不同的注册表配置 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
GCP 容器注册表构建在 GCP Cloud Storage 之上,可以在那里设置相当复杂的保留策略。
然而,容器注册表中没有这样的功能,并且存储中的图像之间没有区别(所有图像文件名都是哈希值,并且位于同一存储桶的同一目录中),因此无法设置策略来保留仅单个图像的最后五个版本。
有谁知道是否可以为 GCP 中的图像设置更复杂的保留政策以及应该如何做?
google-cloud-storage google-cloud-platform docker-registry gcloud