我们想在开始部署之前自动检查公共注册中心(Docker Hub)中是否存在图像.使用v1 API,我们只会查询https://index.docker.io/v1/repositories/gliderlabs/alpine/tags/3.2示例.
但是现在注册表的官方API是v2,检查公共注册表中图像是否存在的官方方法是什么?
V1
$ curl -i https://index.docker.io/v1/repositories/gliderlabs/alpine/tags/latest
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Tue, 11 Aug 2015 10:02:09 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Vary: Cookie
X-Frame-Options: SAMEORIGIN
Strict-Transport-Security: max-age=31536000
[{"pk": 20307475, "id": "5bd56d81"}, {"pk": 20355979, "id": "511136ea"}]
Run Code Online (Sandbox Code Playgroud)
v2:
$ curl -i https://index.docker.io/v2/repositories/gliderlabs/alpine/tags/latest
HTTP/1.1 301 MOVED PERMANENTLY
Server: nginx/1.6.2
Date: Tue, 11 Aug 2015 10:04:20 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
X-Frame-Options: SAMEORIGIN
Location: https://index.docker.io/v2/repositories/gliderlabs/alpine/tags/latest/
Strict-Transport-Security: max-age=31536000
$ curl -i https://index.docker.io/v2/repositories/gliderlabs/alpine/tags/latest/
HTTP/1.1 301 MOVED …Run Code Online (Sandbox Code Playgroud) 我有两个主机,每个都安装了docker.
众所周知,每个docker都将图像存储在本地/var/lib/docker目录中.
因此,如果我想使用某些图像,例如ubuntu,我必须执行docker pull从每个主机的互联网下载.
我认为这很慢.
我可以将图像存储在共享磁盘阵列中吗?然后让一些主机拉一次图像,允许每个可以访问共享磁盘的主机直接使用该图像.
是可能还是好的做法?为什么docker不是这样设计的?
它可能需要破解docker的源代码来实现它.
我正在推动Docker Hub上的私有docker存储库,我不断收到此错误:
2726b5968341: Image successfully pushed
2fd0731064ec: Image successfully pushed
49328a658a81: Image successfully pushed
6beafaa9c78d: Image successfully pushed
bb8b822852f4: Image successfully pushed
6a0d258340b1: Pushing
FATA[0457] Failed to upload metadata: Put https://cdn-registry-1.docker.io/v1/images/6a0d258340b180fd569ec687653d805ebb70e77c1943ca6cfc9d296392ad79ee/json: dial tcp: lookup cdn-registry-1.docker.io on 192.168.1.1:53: read udp 192.168.1.1:53: i/o timeout
Run Code Online (Sandbox Code Playgroud)
我在Mac OS上运行Docker boot2docker.在运行push命令7次以上它最终成功完成后,但我想我还是会问.
有谁看过这个吗?关于如何解决的提示?
我试图理解docker images(或docker inspect)报告的图像ID 与注册表或清单中的实际图层或图像(使用v2)之间的联系.
我运行码头图像,我得到(缩写和更改以保护不那么无辜):
REPOSITORY TAG IMAGE ID
my.local.registry/some/image latest abcdefg
Run Code Online (Sandbox Code Playgroud)
如果我使用API拉出上面图像的清单,我会得到一个包含fsLayers,而不是其中一个匹配图像的(完整)ID.我明白了,因为图像是图层的总和.
但是,如果我将该图像拉到别处,我会获得相同的ID.如果我更新图像,推送它,新版本有一个新的ID.
我以为它可能是清单的哈希.但是,(a)通过API提取清单不会返回JSON中清单的哈希值,并且(b)查看注册表目录本身,给定清单中的sha256 /var/lib/registry/v2/repositories/some/image/_manifests/tags/latest/current/link(或那些index/sha256/)给出了正确的链接对于已下载但与图像ID不匹配的清单.
我假设图像ID与blob匹配,但也许我错了?
我创建了一个包含所需包的docker镜像.我运行了docker镜像,指定了主机和访客端口以及所需的卷安装示例:
sudo docker run -it --name CONTAINERNAME -v /host:/guest -p
hostportno:guestportno
Run Code Online (Sandbox Code Playgroud)
我的容器运行良好.
我正在尝试使用将我的容器迁移到新的docker镜像docker-compose.
我创建了docker-compose.yml文件并指定了所需的参数,如下所示:
image: test1
ports
- "1234:123"
- "2000:223"
volumes:
- /home:/test
-container_name: dockercomposetest
working_dir: /test
command: /bin/bash
Run Code Online (Sandbox Code Playgroud)
我无法使用docker-compose迁移它.
我收到的问题如下:
Conflict. The name "test" is already in use by container eeedac72bb25.
You have to delete (or rename) that container to be able to reuse that
name.
Run Code Online (Sandbox Code Playgroud)
目前的解决方法是我必须停止并移除容器并执行docker-compose up.
我是否可以使用与我在正常docker run过程中启动的名称相同的docker-compose重新启动/迁移容器.
docker boot2docker dockerfile docker-registry docker-compose
当我尝试推送泊坞窗图像时,我收到以下消息.
这可能是因为图层存储中的内部文件已被修改.重新拉动或重建此图像可能会解决此问题
2e12e39dbc83: Pushing [==================================================>] 110.6 MB
52a118051ff2: Already exists
fd00846d8a3a: Already exists
9f14db3a9fd9: Already exists
d8933699c403: Already exists
Failed to upload layer: Put https://privaterepo/v1/images/fc05a48f11d077de64302033d8cba3384873df2bd3084a1211f24b726a59d224/layer: could not verify layer data for: sha256:2e12e39dbc83fcfacfff9c522ea8709021dca87764ff32fc27218d1fd828796c. This may be because internal files in the layer store were modified. Re-pulling or rebuilding this image may resolve the issueRun Code Online (Sandbox Code Playgroud)
有人遇到过这个问题吗?
我想添加一个不安全的注册表,用于Windows(10)机器上的docker测试.不幸的是,我无法找到通常的/ etc/docker/default 配置文件位于Windows上的任何信息.
在这里有人能够在Windows上添加docker选项吗?
干杯.
(尝试从不安全的注册表中提取而不将其添加到选项中时出现的错误是:"无法与xxxx进行握手无法验证xxxx的证书,因为它不包含任何IP SAN")
UPDATE1
我找到了一种看起来很有前景的方法:
但现在我收到此错误:"获取https:// xxxx:port/v1/_ping:x509:无法验证xxxx的证书,因为它不包含任何IP SAN"
(https://akrambenaissi.com/2015/11/17/addingediting-insecure-registry-to-docker-machine-afterwards/)
UPDATE2
重新启动Windows后,它工作:
我有一个私人注册表,我存储了所有的docker镜像.
我注意到当我从中提取图像时,我本地计算机上的图像大小与注册表上图像大小的差异很大.
例如,我有一个名为mydb的图像(大约126 MB).
当我在我的本地机器上拉它并执行"docker images"时,它表示该图像的"VIRTUAL SIZE"现在差不多大三倍(388 MB).
我想知道它是什么原因以及"VIRTUAL SIZE"实际上意味着什么.
谢谢 :) .
类似于" Docker图像的sha256代码是什么? "这个问题,我想找到一个Docker镜像的摘要.我下载图片时可以看到摘要:
$ docker pull waisbrot/wait:latest
latest: Pulling from waisbrot/wait
Digest: sha256:6f2185daa4ab1711181c30d03f565508e8e978ebd0f263030e7de98deee5f330
Status: Image is up to date for waisbrot/wait:latest
$
Run Code Online (Sandbox Code Playgroud)
另一个问题,什么是获取图像摘要的Docker注册表v2 API端点有一个建议Docker-Content-Digest标题的答案.
Docker-Content-Digest当我获取图像的清单时,我可以看到有一个标题:
$ curl 'https://auth.docker.io/token?service=registry.docker.io&scope=repository:waisbrot/wait:pull' -H "Authorization: Basic ${username_password_base64}"
# store the resulting token in DT
$ curl -v https://registry-1.docker.io/v2/waisbrot/wait/manifests/latest -H "Authorization: Bearer $DT" -XHEAD
* Trying 52.7.141.30...
* Connected to registry-1.docker.io (52.7.141.30) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: *.docker.io
* Server certificate: RapidSSL SHA256 …Run Code Online (Sandbox Code Playgroud) 我是一个新的 docker 用户,正在尝试了解一些有关 docker 的知识。\n我有一个私有的 docker 注册表。里面有一些图像(例如:I1,I2,I3,I4,I5)。很多这些图像里面都有标签。让我们考虑以下几点:
\nImage I1 - Tags: T11, T12, T13\nImage I2 - Tags: T21, T22, T23, T24\nImage I3 - Tags: T31, T32\nImage I4 - Tags: T41, T42, T43, vT44\nImage I5 - Tags: T51, T52\nRun Code Online (Sandbox Code Playgroud)\n我只想T12, T22 and T52从 docker 注册表中删除 Tags: 。
我怎样才能实现它?
\n我\xc2\xb4已经阅读了很多帖子,但我仍然没有\xc2\xb4t弄清楚这一点。\n这些似乎有一些有价值的内容:\n https://docs.docker.com/registry/spec/api /#deleting-an-image \n从私有 Docker 注册表中删除图像的方法\n尽管读完后我仍然不知道如何做到这一点。
\n如果有人能指出我正确的方向,我将不胜感激。
\ndocker ×10
docker-registry ×10
dockerhub ×3
boot2docker ×2
containers ×1
dockerfile ×1
image-size ×1
macos ×1
options ×1
windows ×1