我想知道是否可以工作..
我们有服务 FOO 和 BAR,它们与 Docker 注册表在同一个集群上运行。假设该集群用于生产,而不是用于开发
我们有 CI/CD 系统,负责构建镜像并将它们推送到 docker 注册表。
Docker 注册表仅在 kubernetes 专用网络中使用,我们不会在集群之外推送或拉取镜像,因为……我为什么要这样做?
+-----------------------------------------------+
| |
| KUBERNETES |
| +-------+ |
| | VCS | +----------+ |
| | <----------+ | |
| | | | CI/CD | |
| +-------+ +-------+ | |
| | +----------+ |
| | |
| | +-----+ |
| +--------v-----+ <-----+FOO | |
| | INSECURE | +-----+ |
| | DOCKER | +-------+ |
| | REGISTRY | …Run Code Online (Sandbox Code Playgroud) 不久前,我看到一篇题为“Inspecting Docker Images without Pulling They”docker inspect的文章,深入了解了使用REST 调用进行操作所需的特定 API 调用的本质。然而,我想知道自那篇文章撰写以来,Docker 注册表 API 是否发生了一些变化。
本文指出,您需要按顺序进行三个 REST 调用才能获取有关容器的信息。对于公共 Docker 注册表,它们如下:
向 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可能是类似nginx或docker- 基本上是您正在查找的任何图像。此 REST 调用返回一个令牌以在后续请求中使用。
用于检索清单列表的 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。这是我们在最终请求中使用的摘要字符串。
最后,使用我们在步骤 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,我关心的字段是 …
我正在尝试使用 SHA256 哈希来搜索图像:
我有sha256哈希值,我想知道是否存在具有此 sha256 哈希值的 docker 镜像。是否可以做到这一点以及如何做到?
我们在文件中使用registry_mirrors&insecure_registries选项docker daemon.json。我们想停止设置mirrors 硬编码的位置。
env variable里面可以用吗daemon.json?因此,ip X.Y.Z.W:PORT我们不应该写,而应该写 ${REPO1}. 希望可以REPO1在不重新启动的情况下更改 vardaemon
该解决方案必须允许在不重新启动守护程序的情况下更改repo位置
无法在 daemon.json\n1 中使用以下内容。${VAR_NAME}
\n\n使用自定义主机名并在/etc/hosts. 这允许在不重新启动守护进程的情况下更改存储库ip。但它不允许改变port或protocol
\n\n\n某些选项可以在守护程序运行时重新配置,而无需重新启动进程。我们在 Linux 中使用 SIGHUP 信号来重新加载,在 Windows 中使用全局事件,键为 Global\\docker-daemon-config-$PID。可以在配置文件中修改这些选项,但仍会检查与提供的标志是否存在冲突。如果存在冲突,守护进程将无法重新配置自身,但它不会\xe2\x80\x99t停止执行源
\n
因此可以编辑registry和 dosudo systemctl …
我正在尝试将多架构 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 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 pull gcr.io/[项目 ID]/[图像]:[标签]
来自守护程序的错误响应:gcr.io/[PROJECT-ID]/[IMAGE]:[TAG] 的拉取访问被拒绝,存储库不存在或可能需要“docker 登录”:被拒绝:“0.2.0”的权限被拒绝请求“/v2/[项目 ID]/[图像]/清单/[标签]”。
有任何想法吗?
我需要将许多 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命令上的“提取阶段”。因为这里的提取比拉取花费的时间要长得多,而且我实际上并不需要提取它。
我正在尝试从 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)
我不确定出了什么问题。我刚刚用谷歌搜索并找到了与该错误相关的以下链接,但没有帮助。
类似于带有镜像的 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 地址,但它也不会回退到我的私人存储库。
docker-registry ×10
docker ×9
containers ×1
curl ×1
dockerfile ×1
harbor ×1
kubernetes ×1
nexus ×1
ubuntu ×1