タグ「latest」が与えられた場合、Docker Hubで同じイメージIDを持つ別のタグを探したいとします。Docker Hub APIを使用してタグのDockerイメージIDを特定する方法はありますか?
がTOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${UNAME}'", "password": "'${UPASS}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)
curl -s -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/repositories/fluent/fluentd/tags/?page_size=100 | jq
残念ながら、それは常に画像IDが、含まれていません(gist.github.com/kizbitzを参照してください):ここでは
はドッカーハブAPI v2のとレポのためにすべてのタグを見つける方法ですこのキーのヌル値:
$ curl -s -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/repositories/fluent/fluentd/tags/?page_size=100 | jq
{
"count": 36,
"next": null,
"previous": null,
"results": [
...
{
"name": "v0.14.11",
"full_size": 11964464,
"id": 7084687,
"repository": 219785,
"creator": 2923,
"last_updater": 2923,
"last_updated": "2016-12-27T07:16:41.294807Z",
"image_id": null,
"v2": true,
"platforms": [
5
]
},
...
残念ながら、イメージIDは上記のJSONの「id」とは異なるものです。
$ docker images | grep fluent
docker.io/fluent/fluentd v0.14.11 1441d57beff9 3 weeks ago 38.25 MB
理論的には、ドッカーマニフェストと、このドッカーレジストリ呼び出しと画像IDと一緒にアクセスすることが可能なはずであるが、それはどちらか助けていません:
$ curl -s -H "Authorization: JWT ${TOKEN}" "https://registry.hub.docker.com/v2/fluent/fluentd/manifests/latest"
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"repository","Name":"fluent/fluentd","Action":"pull"}]}]}
(stackoverflow.comを参照してください)
Docker GitHubリポジトリにも同様の問題がありますが、解決策を見つけることはまだできません:https://github.com/docker/distribution/issues/1490。
P.S:ここでは、私がテスト画像をプッシュしようとしていると私のドッカーバージョンです:
$ docker version
Client:
Version: 1.12.6
API version: 1.24
Package version: docker-common-1.12.6-5.git037a2f5.fc25.x86_64
Go version: go1.7.4
Git commit: 037a2f5/1.12.6
Built: Wed Jan 18 12:11:29 2017
OS/Arch: linux/amd64
マイナーノート(http://www.cakesolutions.net/teamblogs/docker-registry-api-calls-as-an-authenticated-userを参照してください)ヘッダーでは 'curl -I'を使ってHTTP HEADを行うだけです。また、 '-i'は' -D-'と同じことを行います。 –