标签: docker-registry

Kubernetes 和不安全的注册表

我想知道是否可以工作..

我们有服务 FOO 和 BAR,它们与 Docker 注册表在同一个集群上运行。假设该集群用于生产,而不是用于开发

我们有 CI/CD 系统,负责构建镜像并将它们推送到 docker 注册表。

Docker 注册表仅在 kubernetes 专用网络中使用,我们不会在集群之外推送或拉取镜像,因为……我为什么要这样做?

+-----------------------------------------------+
|                                               |
|                           KUBERNETES          |
|    +-------+                                  |
|    | VCS   |          +----------+            |
|    |       <----------+          |            |
|    |       |          | CI/CD    |            |
|    +-------+  +-------+          |            |
|               |       +----------+            |
|               |                               |
|               |             +-----+           |
|      +--------v-----+ <-----+FOO  |           |
|      | INSECURE     |       +-----+           |
|      | DOCKER       |           +-------+     |
|      | REGISTRY     | …
Run Code Online (Sandbox Code Playgroud)

kubernetes docker-registry

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

如何使用 Docker 注册表 API 提取有关容器的信息?未经授权

不久前,我看到一篇题为“Inspecting Docker Images without Pulling They”docker inspect的文章,深入了解了使用REST 调用进行操作所需的特定 API 调用的本质。然而,我想知道自那篇文章撰写以来,Docker 注册表 API 是否发生了一些变化。

本文指出,您需要按顺序进行三个 REST 调用才能获取有关容器的信息。对于公共 Docker 注册表,它们如下:

  1. 向 auth.docker.io 发出 GET 请求以获取令牌

    curl "https://auth.docker.io/token?scope=repository:<image>:pull&service=registry.docker.io"
    
    Run Code Online (Sandbox Code Playgroud)

    在这种情况下,image可能是类似nginxdocker- 基本上是您正在查找的任何图像。此 REST 调用返回一个令牌以在后续请求中使用。

  2. 用于检索清单列表的 GET 请求

    curl -H "Accept: application/vnd.docker.distribution.manifest.v2+json"
    -H "Authorization: Bearer <token-from-step-1>"
    "https://registry-1.docker.io/v2/<image>/manifests/<tag>"
    
    Run Code Online (Sandbox Code Playgroud)

    image与步骤 1 中的相同,tag可能类似于latest. 此调用返回一些 JSON;关键是我们需要提取 处的值.config.digest。这是我们在最终请求中使用的摘要字符串。

  3. 最后,使用我们在步骤 2 中收到的摘要来检索容器配置的 GET 请求

    curl -H "Accept: application/vnd.docker.distribution.manifest.v2+json"
    -H "Authorization: Bearer <token-from-step-1>"
    "https://registry-1.docker.io/v2/<image>/blobs/<digest-from-step-2>"
    
    Run Code Online (Sandbox Code Playgroud)

    这会返回一些 JSON,我关心的字段是 …

curl docker docker-registry

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

使用 SHA 哈希搜索 Docker 镜像

我正在尝试使用 SHA256 哈希来搜索图像:

我有sha256哈希值,我想知道是否存在具有此 sha256 哈希值的 docker 镜像。是否可以做到这一点以及如何做到?

containers docker dockerfile docker-registry docker-compose

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

是否可以在 docker daemon 配置文件中使用环境变量

背景:

\n\n

我们在文件中使用registry_mirrors&insecure_registries选项docker daemon.json。我们想停止设置mirrors 硬编码的位置。

\n\n

问题

\n\n

env variable里面可以用吗daemon.json?因此,ip X.Y.Z.W:PORT我们不应该写,而应该写 ${REPO1}. 希望可以REPO1在不重新启动的情况下更改 vardaemon

\n\n

评论

\n\n

该解决方案必须允许在不重新启动守护程序的情况下更改repo位置

\n\n

编辑

\n\n

无法在 daemon.json\n1 中使用以下内容。${VAR_NAME}

\n\n

可能的解决方法

\n\n

使用自定义主机名并在/etc/hosts. 这允许在不重新启动守护进程的情况下更改存储库ip它不允许改变portprotocol

\n\n

可能的解决方法2

\n\n
\n

某些选项可以在守护程序运行时重新配置,而无需重新启动进程。我们在 Linux 中使用 SIGHUP 信号来重新加载,在 Windows 中使用全局事件,键为 Global\\docker-daemon-config-$PID。可以在配置文件中修改这些选项,但仍会检查与提供的标志是否存在冲突。如果存在冲突,守护进程将无法重新配置自身,但它不会\xe2\x80\x99t停止执行

\n
\n\n

因此可以编辑registry和 dosudo systemctl …

docker docker-registry docker-registry-mirror docker-daemon

5
推荐指数
0
解决办法
607
查看次数

什么是“清单 blob 未知:注册表未知 blob”错误

我正在尝试将多架构 docker 映像推送到 docker hub 并遇到错误(在https://github.com/docker/distribution/issues/3100处打开了 docker 问题):

\n\n
\xe2\x9d\xaf docker build -t andig/evcc:latest-amd64 -f linux-amd64-.Dockerfile .\n\xe2\x9d\xaf docker build -t andig/evcc:latest-arm.v6 -f linux-arm-6.Dockerfile .\n\xe2\x9d\xaf docker push andig/evcc:latest-amd64\n\xe2\x9d\xaf docker push andig/evcc:latest-arm.v6\n\xe2\x9d\xaf docker manifest create --amend andig/evcc:latest andig/evcc:latest-amd64 andig/evcc:latest-arm.v6\n\xe2\x9d\xaf docker manifest annotate andig/evcc:latest andig/evcc:latest-amd64 --os=linux --arch=amd64\n\xe2\x9d\xaf docker manifest annotate andig/evcc:latest andig/evcc:latest-arm.v6 --os=linux --arch=arm --variant=v6\n\xe2\x9d\xaf docker manifest push andig/evcc:latest\n\nfailed to put manifest docker.io/andig/evcc:latest: errors:\nmanifest blob unknown: blob unknown to registry\nmanifest blob unknown: blob unknown to registry\nmanifest blob unknown: blob unknown to …
Run Code Online (Sandbox Code Playgroud)

docker docker-registry

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

Docker:如何从所有远程注册表中注销?

我以为该docker logout命令会将我从刚刚登录的远程私有 docker 注册表中注销,但事实并非如此。

在尝试注销之前:

$ cat ~/.docker/config.json

{
    "auths": {
            "rg.nl-ams.scw.cloud": {
                    "auth": "da2kleGhoPNjVj...pLri69="
...
Run Code Online (Sandbox Code Playgroud)

命令后

$ docker logout

$ cat ~/.docker/config.json

{
    "auths": {
            "rg.nl-ams.scw.cloud": {
                    "auth": "da2kleGhoPNjVj...pLri69="
...
Run Code Online (Sandbox Code Playgroud)

这是有问题的,因为当我启动run命令时,docker 尝试从这个远程注册表中提取图像,但我不希望发生这种情况。我不想让 docker 知道这个注册表了。我应该怎么办?

我现在看到,docker logout默认情况下,您会从某个“默认服务器”中注销,该服务器显然是“ https://index.docker.io/v1/ ”。如何从所有服务器注销?我真的需要为此编写脚本吗?我不想依赖特定的服务器名称,我只是想确保 docker 客户端没有在任何地方登录,以便我可以以干净且可重复的方式运行测试。

docker docker-registry

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

gcr.io 的拉取访问被拒绝

我试图在我的项目存储库中提取这样的图像,但我不断收到此错误。

我的身份验证没有问题,并且docker 登录工作正常。

$ docker pull gcr.io/[项目 ID]/[图像]:[标签]

来自守护程序的错误响应:gcr.io/[PROJECT-ID]/[IMAGE]:[TAG] 的拉取访问被拒绝,存储库不存在或可能需要“docker 登录”:被拒绝:“0.2.0”的权限被拒绝请求“/v2/[项目 ID]/[图像]/清单/[标签]”。

有任何想法吗?

ubuntu docker google-cloud-platform docker-registry

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

Docker:高效地将映像迁移到另一个注册表

我需要将许多 Docker 映像从旧注册表迁移到新注册表。执行此操作的标准方法是:

docker pull old-registry/image:tag
docker tag old-registry/image:tag new-registry/image:tag
docker push new-registry/image:tag
docker rmi old-registry/image:tag
docker rmi new-registry/image:tag
Run Code Online (Sandbox Code Playgroud)

现在,其中一些图像非常巨大,超过100GB,并且整个过程需要很长时间。谁能想出一种方法来加快速度吗?是否有类似注册中心之间直接转移的方式?或者,至少有可能避免docker pull命令上的“提取阶段”。因为这里的提取比拉取花费的时间要长得多,而且我实际上并不需要提取它。

docker docker-registry

5
推荐指数
0
解决办法
186
查看次数

Docker镜像拉取错误无效字符

我正在尝试从 DTR 中提取 docker 映像,但出现以下错误

#docker pull repo/appname
Trying to pull repository  repo/appname ...
Pulling repository repo/appname
**invalid character '<' looking for beginning of value**
Run Code Online (Sandbox Code Playgroud)

我不确定出了什么问题。我刚刚用谷歌搜索并找到了与该错误相关的以下链接,但没有帮助。

https://github.com/stripe/stripe-go/issues/642

docker docker-registry harbor

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

使用注册表镜像使用 Sonatype Nexus 代理 docker hub

类似于带有镜像的 Docker 私有注册表,但我使用的是 Sonatype Nexus,它类似于Nexus 注册表镜像 docker hub 不起作用,但我也使用安全密码保护的存储库

我为 Docker 守护进程设置了这些设置。

{
  "registry-mirrors": [
    "https://repo.myprivate.com"
  ],
  "insecure-registries": [],
  "debug": true,
  "experimental": false
}
Run Code Online (Sandbox Code Playgroud)

但是,当我拉取图像ubuntu并查看网络访问时,我发现它没有访问我的服务器,而是访问了 Docker Hub 服务器。

我猜这是因为我没有为镜像设置身份验证,但我不知道要使用的设置。

我还想避免使用 Nexus 3 进行代理私有 docker 注册表,它会更改图像的名称以添加地址。

要使用代理拉取,我必须做docker pull repo.myprivate.com/library/alpine我想避免的事情。

看起来它首先优先考虑官方存储库,然后再访问注册表镜像。

我尝试的另一件事是使用 Windows 防火墙阻止 IP 地址,但它也不会回退到我的私人存储库。

nexus docker docker-registry

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