UPDATE Terima kasih atas saran @ degelf. Inilah skrip shellnya.
#!/bin/bash
if [ $# -lt 1 ]
then
cat << HELP
dockertags -- list all tags for a Docker image on a remote registry.
EXAMPLE:
- list all tags for ubuntu:
dockertags ubuntu
- list all php tags containing apache:
dockertags php apache
HELP
fi
image="$1"
tags=`wget -q https://registry.hub.docker.com/v1/repositories/${image}/tags -O - | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n' | awk -F: '{print $3}'`
if [ -n "$2" ]
then
tags=` echo "${tags}" | grep "$2" `
fi
echo "${tags}"
Anda bisa membuat nama file baru dockertags, di bawah / usr / local / bin (atau menambahkan PATH env ke .bashrc/ .zshrc) Anda, dan memasukkan kode itu ke dalamnya. Kemudian tambahkan izin yang dapat dieksekusi ( chmod +x dockertags).
Pemakaian:
dockertags ubuntu ---> daftarkan semua tag ubuntu
dockertags php apache ---> daftarkan semua tag php php yang berisi 'apache'
Anda dapat membungkus semuanya dalam echo [backtick] ...[backtick] untuk memadatkannya menjadi satu baris. Dan / atau ganti "debian" dengan $ 1 dan masukkan ke dalam skrip yang disebut "dockertags" di bawah / usr / local / bin. Lalu sebelum backtick penutup Anda dapat menambahkan | grep $ 2. Kemudian chmod + x, dan kemudian Anda bisa pergi "dockertags php apache" untuk melihat semua tag php yang mengandung apache.
dagelf
8
wget -q https://registry.hub.docker.com/v1/repositories/circleci/ruby/tags -O - | jq -r '.[].name'jika Anda telah jqmenginstal
sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g'jauh lebih bersih ditulistr -d '[]" '
William Pursell
1
Saya dimodifikasi untuk menggunakan argumen posisi kedua sebagai nama pengguna: kata sandi sehingga saya dapat mengganti wget untuk curl dan menggunakan userauth="-u ${2}"memungkinkan saya untuk ${userauth}(jika itu kosong, tidak ada u beralih atau params). Ini dapat membantu siapa saja yang menggunakan repo pribadi
Berdasarkan info dalam sub-tag Tag di dokumen , GET ini tampaknya memerlukan otorisasi, sehingga API + v1 sedtampaknya benar-benar lebih mudah digunakan untuk pemeriksaan cepat ...
alias
3
Jika Anda mendapatkan kesalahan "tidak sah", lihat jawaban alternatif saya . Jangan menyinggung orang yang memposting jawaban asli. Saya harus mengambil langkah-langkah tambahan untuk mendapatkan jawaban di atas untuk bekerja dan ingin membantu orang lain.
RobV8R
23
Jika Anda ingin menggunakan API docker registry v2, ia mencantumkan tag berdasarkan halaman. Untuk daftar semua tag dari suatu gambar, Anda mungkin ingin menambahkan parameter page_size besar ke url, misalnya
Docker Hub tampaknya membatasi ukuran page_size hingga maksimum 100.
Shane
2
@Shane Oh benarkah? Saya belum menemukan gambar dengan banyak halaman. Apakah url suka https://registry.hub.docker.com/v2/repositories/library/centos/tags/?page=101bekerja?
API Docker V2 membutuhkan token pembawa OAuth dengan klaim yang sesuai. Menurut pendapat saya, dokumentasi resmi agak kabur tentang topik tersebut. Agar orang lain tidak mengalami rasa sakit yang sama dengan yang saya alami, saya menawarkan docker-tagsfungsi di bawah ini .
Memang, docker-tagsmembuat beberapa asumsi. Secara khusus, sebagian besar parameter permintaan OAuth dikodekan. Implementasi yang lebih ambisius akan membuat permintaan yang tidak diautentikasi ke registri dan mendapatkan parameter OAuth dari respons yang tidak diautentikasi.
Catatan yang image_nameseharusnya tidak mengandung detail pengguna dll. Misalnya jika Anda mendorong gambar bernama tutum.co/username/xmaka image_nameseharusnya x.
Apa situs web tutum.co ini yang menurut Anda harus saya beri mereka login dan kata sandi dockerhub saya?
Nakilon
1
@Nakilon Ketika saya menulis jawaban ini, beberapa tahun yang lalu, Tutum adalah layanan yang menyediakan Docker Registry pribadi. Dan saya tidak "memberi mereka" kata sandi saya, saya mengautentikasi dengan layanan mereka menggunakan otentikasi dasar HTTP standar melalui https.
Johan
Tutum tidak ada lagi. Dapatkah Anda memperbarui balasan Anda sehingga orang tidak sengaja mengirim kredensial mereka kepada siapa pun yang memiliki domain itu sekarang?
Dapatkan semua tag dari Docker Hub: perintah ini menggunakan JSONprosesor command-line jquntuk memilih nama tag dari yang JSONdikembalikan oleh Docker Hub Registry (tanda kutip dihapus dengan tr). Ganti perpustakaan dengan nama pengguna Docker Hub, debian dengan nama gambar:
menggunakan versi 1:curl -L -s 'https://registry.hub.docker.com/v1/repositories/danilobatistaqueiroz/job-wq-1/tags'
danilo
1
Saya telah melakukan hal ini ketika saya harus mengimplementasikan tugas di mana jika pengguna entah bagaimana mengetik tag yang salah maka kita harus memberikan daftar semua tag yang ada di repo (Docker repo) yang ada dalam register. Jadi saya punya kode dalam batch Script.
<html>
<pre style="background-color:#bcbbbb;">
@echo off
docker login --username=xxxx --password=xxxx
docker pull %1:%2
IF NOT %ERRORLEVEL%==0 (
echo "Specified Version is Not Found "
echo "Available Version for this image is :"
for /f %%i in (' curl -s -H "Content-Type:application/json" -X POST -d "{\"username\":\"user\",\"password\":\"password\"}" https://hub.docker.com/v2/users/login ^|jq -r .token ') do set TOKEN=%%i
curl -sH "Authorization: JWT %TOKEN%" "https://hub.docker.com/v2/repositories/%1/tags/" | jq .results[].name
)
</pre>
</html>
Jadi dalam hal ini kita dapat memberikan argumen untuk keluar file batch seperti:
Jika orang ingin membaca tag dari registri RedHat https://registry.redhat.io/v2maka langkah-langkahnya adalah:
# example nodejs-12 image
IMAGE_STREAM=nodejs-12
REDHAT_REGISTRY_API="https://registry.redhat.io/v2/rhel8/$IMAGE_STREAM"# Get an oAuth token based on a service account username and password https://access.redhat.com/articles/3560571
TOKEN=$(curl --silent -u "$REGISTRY_USER":"$REGISTRY_PASSWORD""https://sso.redhat.com/auth/realms/rhcc/protocol/redhat-docker-v2/auth?service=docker-registry&client_id=curl&scope=repository:rhel:pull"| jq --raw-output '.token')# Grab the tags
wget -q --header="Accept: application/json"--header="Authorization: Bearer $TOKEN"-O -"$REDHAT_REGISTRY_API/tags/list"| jq -r '."tags"[]'
Jika Anda ingin membandingkan apa yang Anda miliki di registri openshift lokal Anda dengan apa yang ada di registri up.redhat.com maka di sini adalah skrip lengkap .
docker(1)
github.com/docker/for-linux/issues/455Jawaban:
Saya mendapat jawabannya dari sini . Terima kasih banyak! :)
Hanya skrip satu baris: (temukan semua tag debian)
UPDATE Terima kasih atas saran @ degelf. Inilah skrip shellnya.
Anda bisa membuat nama file baru
dockertags
, di bawah / usr / local / bin (atau menambahkan PATH env ke.bashrc
/.zshrc
) Anda, dan memasukkan kode itu ke dalamnya. Kemudian tambahkan izin yang dapat dieksekusi (chmod +x dockertags
).Pemakaian:
dockertags ubuntu
---> daftarkan semua tag ubuntudockertags php apache
---> daftarkan semua tag php php yang berisi 'apache'sumber
...
[backtick] untuk memadatkannya menjadi satu baris. Dan / atau ganti "debian" dengan $ 1 dan masukkan ke dalam skrip yang disebut "dockertags" di bawah / usr / local / bin. Lalu sebelum backtick penutup Anda dapat menambahkan | grep $ 2. Kemudian chmod + x, dan kemudian Anda bisa pergi "dockertags php apache" untuk melihat semua tag php yang mengandung apache.wget -q https://registry.hub.docker.com/v1/repositories/circleci/ruby/tags -O - | jq -r '.[].name'
jika Anda telahjq
menginstalsed -e 's/[][]//g' -e 's/"//g' -e 's/ //g'
jauh lebih bersih ditulistr -d '[]" '
userauth="-u ${2}"
memungkinkan saya untuk${userauth}
(jika itu kosong, tidak ada u beralih atau params). Ini dapat membantu siapa saja yang menggunakan repo pribadiPada Docker Registry V2,
GET
cukuplah sederhana :Lihat dokumen untuk lebih lanjut.
sumber
sed
tampaknya benar-benar lebih mudah digunakan untuk pemeriksaan cepat ...Jika Anda ingin menggunakan API docker registry v2, ia mencantumkan tag berdasarkan halaman. Untuk daftar semua tag dari suatu gambar, Anda mungkin ingin menambahkan parameter page_size besar ke url, misalnya
sumber
https://registry.hub.docker.com/v2/repositories/library/centos/tags/?page=101
bekerja?java
gambar adalah contoh yang baik. Ya, Anda dapat melakukan hal-hal seperti registry.hub.docker.com/v2/repository/library/java/tags/… . Lihatnext
danprevious
link dalam hasil untuk contoh.API Docker V2 membutuhkan token pembawa OAuth dengan klaim yang sesuai. Menurut pendapat saya, dokumentasi resmi agak kabur tentang topik tersebut. Agar orang lain tidak mengalami rasa sakit yang sama dengan yang saya alami, saya menawarkan
docker-tags
fungsi di bawah ini .Versi terbaru
docker-tags
dapat ditemukan di GitHubGist saya : "Daftar Docker Image Tags using bash" .Fungsi docker-tag memiliki ketergantungan pada jq . Jika Anda bermain dengan JSON, kemungkinan Anda sudah memilikinya.
Contoh
Memang,
docker-tags
membuat beberapa asumsi. Secara khusus, sebagian besar parameter permintaan OAuth dikodekan. Implementasi yang lebih ambisius akan membuat permintaan yang tidak diautentikasi ke registri dan mendapatkan parameter OAuth dari respons yang tidak diautentikasi.sumber
arr=("$@")
. Tulis sajadocker-tags() { for item; do ....
Saya berhasil membuatnya bekerja menggunakan curl:
Catatan yang
image_name
seharusnya tidak mengandung detail pengguna dll. Misalnya jika Anda mendorong gambar bernamatutum.co/username/x
makaimage_name
seharusnyax
.sumber
Membangun jawaban Yan Foto ( api v2 ), saya membuat skrip Python sederhana untuk membuat daftar tag untuk gambar yang diberikan .
Pemakaian:
Keluaran:
sumber
Jika alat parsing JSON,
jq
tersediasumber
'.[].name'
no matches found: .[].name
. Tapi itu bekerja dengan baik di bash, mungkin itu shell default Anda?jq
perintahLihat utilitas CLI: https://www.npmjs.com/package/docker-browse
Mengizinkan enumerasi tag dan gambar.
docker-browse tags <image>
akan mencantumkan semua tag untuk gambar. misalnyadocker-browse tags library/alpine
docker-browse images
akan mencantumkan semua gambar dalam registri. Saat ini tidak tersedia untukindex.docker.io
.Anda dapat menghubungkannya ke registri apa pun, termasuk yang pribadi, asalkan mendukung Docker Registry HTTP API V2
sumber
Untuk melihat semua tag yang tersedia di browser:
https://registry.hub.docker.com/v1/repositories/<username>/<image_name>/tags
yaitu https://hub.docker.com/r/localstack/localstack/tags
Atau, Anda bisa mendapatkan respons json menggunakan titik akhir ini:
https://registry.hub.docker.com/v1/repositories/localstack/localstack/tags
sumber
Anda juga dapat menggunakan memo ini:
& Tambahkan Mengikuti (sebagaimana adanya):
Jadikan Eksekusi:
Kemudian Akhirnya Cobalah:
[Semoga Anda mengetahui $ & # sebelum menjalankan perintah apa pun]
sumber
Anda dapat menggunakannya jika env Anda tidak memiliki 'jq', =)
sumber
Dapatkan semua tag dari Docker Hub: perintah ini menggunakan
JSON
prosesor command-linejq
untuk memilih nama tag dari yangJSON
dikembalikan oleh Docker Hub Registry (tanda kutip dihapus dengantr
). Ganti perpustakaan dengan nama pengguna Docker Hub, debian dengan nama gambar:sumber
Berikut ini skrip Powershell yang saya tulis untuk Windows. Menangani repo v1 dan v2:
Get-DockerImageVersions.ps1:
sumber
Anda dapat mencapai dengan menjalankan di terminal ini:
Juga, jika Anda tidak memiliki jq Anda harus menginstalnya
sumber
curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/mysql/tags/' | jq .results[].name
akan menghemat perintah grepcurl -L -s 'https://registry.hub.docker.com/v1/repositories/danilobatistaqueiroz/job-wq-1/tags'
Saya telah melakukan hal ini ketika saya harus mengimplementasikan tugas di mana jika pengguna entah bagaimana mengetik tag yang salah maka kita harus memberikan daftar semua tag yang ada di repo (Docker repo) yang ada dalam register. Jadi saya punya kode dalam batch Script.
Jadi dalam hal ini kita dapat memberikan argumen untuk keluar file batch seperti:
sumber
Docker Registry API memiliki titik akhir untuk mencantumkan semua tag .
Sepertinya Tutum memiliki titik akhir yang sama , serta cara mengakses melalui tutum-cli .
Dengan tutum-cli, coba yang berikut ini:
sumber
Dalam powershell 5.1, saya memiliki skrip list_docker_image_tags.ps1 sederhana seperti ini:
Maka saya dapat menerima 4,7 tag seperti ini:
sumber
Anda dapat mencantumkan semua tag dengan skopeo .
Untuk pendaftar eksternal:
sumber
Jika orang ingin membaca tag dari registri RedHat
https://registry.redhat.io/v2
maka langkah-langkahnya adalah:Jika Anda ingin membandingkan apa yang Anda miliki di registri openshift lokal Anda dengan apa yang ada di registri up.redhat.com maka di sini adalah skrip lengkap .
sumber