AKTUALIZACJA Dziękujemy za radę @ degelf. Oto skrypt powłoki.
#!/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}"
Możesz po prostu utworzyć nową nazwę pliku dockertags, w / usr / local / bin (lub dodać env ŚCIEŻKI do .bashrc/ .zshrc) i umieścić w nim ten kod. Następnie dodaj uprawnienia do plików wykonywalnych ( chmod +x dockertags).
Stosowanie:
dockertags ubuntu ---> wyświetl wszystkie tagi ubuntu
Możesz zawinąć całość w echo [lewy] ...[lewy], aby skondensować go w jedną linię. I / lub zamień „debian” na 1 $ i umieść go w skrypcie o nazwie „dockertags” w katalogu / usr / local / bin. Następnie przed zamykającym strzałem wstecznym możesz dodać | grep 2 $. Następnie chmod + x it, a następnie możesz przejść do „dockertags php apache”, aby zobaczyć wszystkie tagi php zawierające apache.
sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g'jest o wiele bardziej czysto napisanetr -d '[]" '
William Pursell
1
Zmodyfikowałem, aby użyć drugiego argumentu pozycyjnego jako nazwy użytkownika: hasła, abym mógł zmienić wget na curl i użyć userauth="-u ${2}"pozwalając mi na to ${userauth}(jeśli jest puste, nie przełącza się ani nie paruje). To może pomóc każdemu, kto korzysta z prywatnych repozytoriów
W oparciu o informacje w podsekcji Tagi w dokumentacji , ten GET wydaje się wymagać autoryzacji, więc interfejs API + v1 sedwydaje się być w rzeczywistości łatwiejszy do szybkiego sprawdzenia ...
akavel
3
Jeśli pojawia się błąd „nieautoryzowany”, zobacz moją alternatywną odpowiedź . Bez obrazy osoby, która opublikowała oryginalną odpowiedź. Musiałem podjąć dodatkowe kroki, aby powyższa odpowiedź zadziałała, i chciałem pomóc innym.
RobV8R,
23
Jeśli chcesz użyć interfejsu API rejestru dokera v2, wyświetla tagi według stron. Aby wyświetlić listę wszystkich tagów obrazu, możesz dodać duży parametr page_size do adresu URL, np
Docker Hub wydaje się ograniczać rozmiar strony do efektywnego maksimum 100.
Shane
2
@Shane Oh naprawdę? Nie spotkałem obrazu z tyloma stronami. Czy adres URL https://registry.hub.docker.com/v2/repositories/library/centos/tags/?page=101działa?
Interfejs API Docker V2 wymaga tokenu nośnika OAuth z odpowiednimi roszczeniami. Moim zdaniem oficjalna dokumentacja na ten temat jest dość niejasna. Aby inni nie cierpieli z powodu tego samego bólu, co ja, oferuję poniżejdocker-tags funkcję.
Wprawdzie docker-tagsprzyjmuje kilka założeń. W szczególności parametry żądania OAuth są w większości zakodowane na stałe. Bardziej ambitna implementacja spowodowałaby nieuwierzytelnione żądanie do rejestru i wyprowadziłaby parametry OAuth z nieuwierzytelnionej odpowiedzi.
Należy pamiętać, że image_namenie powinno zawierać dane użytkownika itd. Na przykład, jeśli jesteś pchanie obraz nazwany tutum.co/username/xpotem image_namepowinno być x.
Jaka jest ta strona tutum.co, którą, jak mówisz, powinienem podać login i hasło do dockerhub?
Nakilon,
1
@Nakilon Kiedy napisałem tę odpowiedź kilka lat temu, Tutum był usługą, która zapewniała prywatny rejestr dokerów. I nie „daję im” mojego hasła, uwierzytelniam się za pomocą ich usługi przy użyciu standardowego podstawowego uwierzytelniania HTTP przez https.
Johan
Tutum już nie istnieje. Czy możesz zaktualizować swoją odpowiedź, aby ludzie nie wysyłali przypadkowo swoich danych uwierzytelniających do osoby, która jest teraz właścicielem tej domeny?
Pobierz wszystkie tagi z Docker Hub: to polecenie używa JSONprocesora wiersza polecenia jqdo wybrania nazw znaczników z JSONrejestru Docker Hub (cudzysłowy są usuwane za pomocą tr). Zamień bibliotekę na nazwę użytkownika Docker Hub, debian na nazwę obrazu:
przy użyciu wersji 1:curl -L -s 'https://registry.hub.docker.com/v1/repositories/danilobatistaqueiroz/job-wq-1/tags'
danilo
1
Zrobiłem to, gdy muszę zaimplementować zadanie, w którym jeśli użytkownik w jakiś sposób wpisze niewłaściwy znacznik, wówczas musimy podać listę wszystkich znaczników obecnych w repozytorium (repozytorium Docker) obecnych w rejestrze. Więc mam kod w skrypcie wsadowym.
<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>
W ten sposób możemy podać argumenty do pliku wsadowego, takiego jak:
Nie sądzę, że to działa w przypadku obrazów rejestru. Po prostu dostaję, że „Identyfikator” <id> ”nie pasuje do żadnej usługi, węzła ani klastra węzłów”.
Johan
1
W PowerShell 5.1 mam prosty skrypt list_docker_image_tags.ps1, taki jak ten:
Jeśli ludzie chcą czytać tagi z rejestru RedHat, https://registry.redhat.io/v2wówczas są następujące kroki:
# 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"[]'
Jeśli chcesz porównać to, co masz w lokalnym rejestrze openshift z tym, co znajduje się w rejestrze upstream.redhat.com, to jest to kompletny skrypt .
docker(1)
github.com/docker/for-linux/issues/455Odpowiedzi:
Mam stąd odpowiedź . Wielkie dzięki! :)
Tylko skrypt wiersza: (znajdź wszystkie tagi debian)
AKTUALIZACJA Dziękujemy za radę @ degelf. Oto skrypt powłoki.
Możesz po prostu utworzyć nową nazwę pliku
dockertags
, w / usr / local / bin (lub dodać env ŚCIEŻKI do.bashrc
/.zshrc
) i umieścić w nim ten kod. Następnie dodaj uprawnienia do plików wykonywalnych (chmod +x dockertags
).Stosowanie:
dockertags ubuntu
---> wyświetl wszystkie tagi ubuntudockertags php apache
---> wyświetl wszystkie tagi php php zawierające „apache”źródło
...
[lewy], aby skondensować go w jedną linię. I / lub zamień „debian” na 1 $ i umieść go w skrypcie o nazwie „dockertags” w katalogu / usr / local / bin. Następnie przed zamykającym strzałem wstecznym możesz dodać | grep 2 $. Następnie chmod + x it, a następnie możesz przejść do „dockertags php apache”, aby zobaczyć wszystkie tagi php zawierające apache.wget -q https://registry.hub.docker.com/v1/repositories/circleci/ruby/tags -O - | jq -r '.[].name'
jeśli maszjq
zainstalowanysed -e 's/[][]//g' -e 's/"//g' -e 's/ //g'
jest o wiele bardziej czysto napisanetr -d '[]" '
userauth="-u ${2}"
pozwalając mi na to${userauth}
(jeśli jest puste, nie przełącza się ani nie paruje). To może pomóc każdemu, kto korzysta z prywatnych repozytoriówPocząwszy od Docker Registry V2
GET
wystarczy:Widzieć dokumentację, aby uzyskać więcej.
źródło
sed
wydaje się być w rzeczywistości łatwiejszy do szybkiego sprawdzenia ...Jeśli chcesz użyć interfejsu API rejestru dokera v2, wyświetla tagi według stron. Aby wyświetlić listę wszystkich tagów obrazu, możesz dodać duży parametr page_size do adresu URL, np
źródło
https://registry.hub.docker.com/v2/repositories/library/centos/tags/?page=101
działa?java
obraz jest dobrym przykładem. Tak, możesz robić takie rzeczy, jak register.hub.docker.com/v2/repositories/library/java/tags/… . Patrznext
iprevious
łączy w wyniku za przykłady.Interfejs API Docker V2 wymaga tokenu nośnika OAuth z odpowiednimi roszczeniami. Moim zdaniem oficjalna dokumentacja na ten temat jest dość niejasna. Aby inni nie cierpieli z powodu tego samego bólu, co ja, oferuję poniżej
docker-tags
funkcję.Najnowszą wersję
docker-tags
można znaleźć w mojej GitHubGist: „Lista znaczników obrazu Docker za pomocą bash” .Funkcja znaczników dokujących ma zależność od jq . Jeśli grasz z JSON, prawdopodobnie już go masz.
Przykład
Wprawdzie
docker-tags
przyjmuje kilka założeń. W szczególności parametry żądania OAuth są w większości zakodowane na stałe. Bardziej ambitna implementacja spowodowałaby nieuwierzytelnione żądanie do rejestru i wyprowadziłaby parametry OAuth z nieuwierzytelnionej odpowiedzi.źródło
arr=("$@")
. Po prostu napiszdocker-tags() { for item; do ....
Udało mi się uruchomić to za pomocą curl:
Należy pamiętać, że
image_name
nie powinno zawierać dane użytkownika itd. Na przykład, jeśli jesteś pchanie obraz nazwanytutum.co/username/x
potemimage_name
powinno byćx
.źródło
Bazując na odpowiedzi Yan Foto ( API v2 ), stworzyłem prosty skrypt Pythona, aby wyświetlić listę znaczników dla danego obrazu .
Stosowanie:
Wynik:
źródło
Jeśli narzędzie analizujące JSON
jq
jest dostępneźródło
'.[].name'
no matches found: .[].name
. Ale działa dobrze na bash, może to twoja domyślna powłoka?jq
polecenia dodałem cytatyZobacz narzędzie CLI: https://www.npmjs.com/package/docker-browse
Umożliwia wyliczenie znaczników i obrazów.
docker-browse tags <image>
wyświetli listę wszystkich tagów obrazu. na przykładdocker-browse tags library/alpine
docker-browse images
wyświetli wszystkie obrazy w rejestrze. Obecnie niedostępne dlaindex.docker.io
.Możesz podłączyć go do dowolnego rejestru, w tym prywatnego, pod warunkiem, że obsługuje on Docker Registry HTTP API V2
źródło
Aby wyświetlić wszystkie dostępne tagi w przeglądarce:
https://registry.hub.docker.com/v1/repositories/<username>/<image_name>/tags
tj. https://hub.docker.com/r/localstack/localstack/tags
Lub możesz uzyskać odpowiedź JSON, używając tego punktu końcowego:
https://registry.hub.docker.com/v1/repositories/localstack/localstack/tags
źródło
Możesz także użyć tego złomu:
& Dołącz następujące (jak to jest):
Zrób to:
Następnie w końcu spróbuj:
[Mam nadzieję, że znasz $ i # przed uruchomieniem jakiegokolwiek polecenia]
źródło
Możesz go użyć, jeśli twoja env nie ma „jq”, =)
źródło
Pobierz wszystkie tagi z Docker Hub: to polecenie używa
JSON
procesora wiersza poleceniajq
do wybrania nazw znaczników zJSON
rejestru Docker Hub (cudzysłowy są usuwane za pomocątr
). Zamień bibliotekę na nazwę użytkownika Docker Hub, debian na nazwę obrazu:źródło
Oto skrypt Powershell, który napisałem dla systemu Windows. Obsługuje repozytorium v1 i v2:
Get-DockerImageVersions.ps1:
źródło
Możesz to osiągnąć, uruchamiając na terminalu:
Ponadto, jeśli nie masz jq, musisz go zainstalować
źródło
curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/mysql/tags/' | jq .results[].name
uratuje ci polecenie grepcurl -L -s 'https://registry.hub.docker.com/v1/repositories/danilobatistaqueiroz/job-wq-1/tags'
Zrobiłem to, gdy muszę zaimplementować zadanie, w którym jeśli użytkownik w jakiś sposób wpisze niewłaściwy znacznik, wówczas musimy podać listę wszystkich znaczników obecnych w repozytorium (repozytorium Docker) obecnych w rejestrze. Więc mam kod w skrypcie wsadowym.
W ten sposób możemy podać argumenty do pliku wsadowego, takiego jak:
źródło
Interfejs API rejestru Docker ma punkt końcowy do wyświetlania wszystkich tagów .
Wygląda na to, że Tutum ma podobny punkt końcowy , a także sposób dostępu za pośrednictwem tutum-cli .
Korzystając z tutum-cli, spróbuj wykonać następujące czynności:
źródło
W PowerShell 5.1 mam prosty skrypt list_docker_image_tags.ps1, taki jak ten:
Następnie mogę grep dla takich tagów 4.7:
źródło
Możesz wyświetlić wszystkie tagi za pomocą skopeo .
W przypadku rejestrów zewnętrznych:
źródło
Jeśli ludzie chcą czytać tagi z rejestru RedHat,
https://registry.redhat.io/v2
wówczas są następujące kroki:Jeśli chcesz porównać to, co masz w lokalnym rejestrze openshift z tym, co znajduje się w rejestrze upstream.redhat.com, to jest to kompletny skrypt .
źródło