วิธีรับรายการรูปภาพในรีจิสทรีนักเทียบท่า v2


204

ฉันใช้นักเทียบท่า registry v1 และฉันสนใจที่จะย้ายไปยังเวอร์ชันที่ใหม่กว่า v2 แต่ฉันต้องการวิธีที่จะได้รับรายชื่อของภาพในรีจิสทรี; เช่นกับรีจิสทรี v1 ฉันสามารถดำเนินการตามคำขอ GET http://myregistry:5000/v1/search?และผลลัพธ์คือ:

{
  "num_results": 2,
  "query": "",
  "results": [
    {
      "description": "",
      "name": "deis/router"
    },
    {
      "description": "",
      "name": "deis/database"
    }
  ]
}

แต่ฉันไม่พบเอกสารที่เป็นทางการที่คล้ายกันเพื่อรับรายการรูปภาพในรีจิสตรี ใครรู้วิธีที่จะทำมันในรุ่นใหม่ v2?


ยังไม่เพียงพอ ต้องการวันที่ของการสร้างภาพและการผลักดันภาพและหวังว่าจะรวม / ระงับเวอร์ชันแท็กก่อนหน้า ต้องมีเว็บอินเตอร์เฟสจริงด้วยใช่ไหม ฉันกำลังพูดคุยกับผู้ดูแลระบบของเรา - เราเพิ่งได้ 2.0
Andrew Wolfe

คำตอบ:


405

สำหรับ Registry V2 รุ่นล่าสุด (ณ วันที่ 2015-07-31) คุณสามารถรับภาพนี้ได้จาก DockerHub:

docker pull distribution/registry:master

รายการที่เก็บทั้งหมด (ภาพที่มีประสิทธิภาพ):

curl -X GET https://myregistry:5000/v2/_catalog
> {"repositories":["redis","ubuntu"]}

แสดงรายการแท็กทั้งหมดสำหรับที่เก็บ:

curl -X GET https://myregistry:5000/v2/ubuntu/tags/list
> {"name":"ubuntu","tags":["14.04"]}

3
คุณได้รับใบรับรองจากที่ไหน
duality_

3
@duality ในกรณีที่รีจิสทรีของคุณใช้ใบรับรองที่ลงนามเองหรือใบรับรองที่ลงนามโดย root CA ที่ไม่น่าเชื่อถือคุณต้องระบุใบรับรองให้กับ curl เพื่อสร้างการเชื่อมต่อที่ปลอดภัย หากต้องการทำการเชื่อมต่อที่ไม่ปลอดภัยคุณสามารถเพิ่มการตั้งค่าสถานะ '--insecure' แทน
jonatan

5
-k, --insecure (SSL)
Ilja

9
ผลลัพธ์เริ่มต้นแสดงบันทึกภาพ 100 ภาพเท่านั้น แต่หากคุณต้องการแสดงมากขึ้นคุณสามารถแบ่งหน้าผลลัพธ์ด้วยข้อความค้นหานี้: http://<registry-url>/v2/_catalog?n=<count>ด้วยจำนวนตัวอย่างเช่น 2000
kikicarbonell

17
หากรีจิสทรีได้รับการป้องกันด้วยรหัสผ่านให้ใช้curl -u <user>:<pass> -X GET ...
nsantos

77

คุณสามารถค้นหา

http: // <ip/hostname>: <port>/ v2 / _catalog


4
... เมื่อเร็ว ๆ นี้ฉันต้องการเพิ่ม https เป็นสิ่งจำเป็นแทนที่จะเป็นเพียง http
Nikola

2
ฉันไม่เห็นความต้องการดังกล่าวสำหรับ Docker Registry ที่เพิ่งติดตั้ง!
Enok82

44

รับแคตตาล็อก

ค่าเริ่มต้น API รีจิสทรีส่งคืน 100 รายการของแคตตาล็อกมีรหัส :

เมื่อคุณขด API ของรีจิสทรี:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog

มันเทียบเท่ากับ:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog?n=100

นี่คือ methon เลขหน้า

เมื่อผลรวมของรายการเกิน 100 คุณสามารถทำได้สองวิธี:

ครั้งแรก : ให้จำนวนที่มากขึ้น

curl --cacert domain.crt https://your.registry:5000/v2/_catalog?n=2000

Sencond : แยกวิเคราะห์ linker ถัดไป

curl --cacert domain.crt https://your.registry:5000/v2/_catalog

องค์ประกอบลิงค์ที่มีอยู่ในส่วนหัวการตอบสนอง:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog

ส่วนหัวการตอบสนอง:

Link: </v2/_catalog?last=pro-octopus-ws&n=100>; rel="next"

องค์ประกอบลิงก์มีรายการสุดท้ายของคำขอนี้จากนั้นคุณสามารถขอ 'หน้า' ถัดไป:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog?last=pro-octopus-ws

ถ้าส่วนหัวของการตอบสนองที่มีการเชื่อมโยงองค์ประกอบคุณสามารถทำมันได้ในวง

รับรูปภาพ

เมื่อคุณได้รับผลของแคตตาล็อกก็จะเป็นดังนี้:

{ "repositories": [ "busybox", "ceph/mds" ] }

คุณสามารถรับภาพในทุกแคตตาล็อก:

curl --cacert domain.crt https://your.registry:5000/v2/busybox/tags/list

ผลตอบแทน:

{"name":"busybox","tags":["latest"]}


1
กำหนด 100 รายการที่นี่
litanhua

2
นี่ควรเป็นคำตอบที่ยอมรับได้ มันเป็นคำตอบเดียวที่อธิบายวิธีที่คุณได้รับเลขหน้าหวาดกลัว คำตอบที่ยอมรับในปัจจุบัน (โจนาตัน) แสดงเฉพาะภาพที่ขึ้นต้นด้วย "a"
user2394284

และคุณจะได้รับรายการแท็กได้ceph/mdsอย่างไร โดยทั่วไปสำหรับพื้นที่เก็บข้อมูลใด ๆ ที่กำหนดด้วย/- /v2/_catalog/ceph/mdt/tags/listไม่ทำงาน
tymik

25

เวอร์ชันล่าสุดของ Docker Registry พร้อมใช้งานจากhttps://github.com/docker/distributionรองรับ Catalog API (v2 / _catalog) สิ่งนี้ช่วยให้ความสามารถในการค้นหาที่เก็บ

หากสนใจคุณสามารถลองใช้ Registry Image Image Docker CLI ที่ฉันสร้างขึ้นเพื่อให้ง่ายต่อการใช้คุณสมบัติการค้นหาในการกระจาย Docker Registry ใหม่ ( https://github.com/vivekjuneja/docker_registry_cli )


21

เราเขียนเครื่องมือ CLI เพื่อจุดประสงค์นี้: docker-lsช่วยให้คุณสามารถเรียกดูรีจิสทรีนักเทียบท่าและสนับสนุนการตรวจสอบผ่านโทเค็นหรือการตรวจสอบขั้นพื้นฐาน


21

นี่ทำให้ฉันเป็นบ้า แต่ในที่สุดฉันก็รวมทุกอย่างเข้าด้วยกัน ตั้งแต่วันที่ 1/25/2015 ฉันได้ยืนยันว่าเป็นไปได้ที่จะแสดงรายการรูปภาพในรีจิสทรีนักเทียบท่า V2 (เหมือนกับ @jonatan ที่กล่าวถึงข้างต้น)

ฉันจะโหวตคำตอบนั้นถ้าฉันมีตัวแทนสำหรับมัน

ฉันจะขยายคำตอบออกไป เนื่องจากการลงทะเบียน V2 ขึ้นอยู่กับความปลอดภัยฉันคิดว่าเป็นการเหมาะสมที่จะรวมวิธีตั้งค่าด้วยใบรับรองที่ลงชื่อด้วยตนเองและเรียกใช้คอนเทนเนอร์ด้วยใบรับรองนั้นนั้นเพื่อให้สามารถทำการเรียก https กับใบรับรองนั้นได้:

นี่เป็นสคริปต์ที่ฉันใช้เพื่อเริ่มรีจิสตรี:

sudo docker stop registry
sudo docker rm -v registry
sudo docker run -d \
  -p 5001:5001 \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v /data/registry:/var/lib/registry \
  -v /root/certs:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ 
  -e REGISTRY_HTTP_DEBUG_ADDR=':5001' \
  registry:2.2.1

สิ่งนี้อาจเห็นได้ชัดสำหรับบางคน แต่ฉันมักจะสับสนกับกุญแจและ certs เสมอ ไฟล์ที่จะต้องมีการอ้างอิงเพื่อทำการโทร @jonaton กล่าวถึงด้านบน ** คือ domain.crt ที่ระบุไว้ข้างต้น (เนื่องจากฉันใส่ domain.crt ใน/rootฉันจึงได้คัดลอกไปยังไดเรกทอรีผู้ใช้ที่สามารถเข้าถึงได้)

curl --cacert ~/domain.crt https://myregistry:5000/v2/_catalog
> {"repositories":["redis","ubuntu"]}

** คำสั่งข้างต้นได้รับการเปลี่ยนแปลง: -X GET ไม่ได้ทำงานจริงเมื่อฉันลองมัน

หมายเหตุ: https://myregistry:5000(ตามด้านบน) ต้องตรงกับโดเมนที่มอบให้กับใบรับรองที่สร้างขึ้น


10

ติดตั้งรีจิสตรี: 2.1.1 หรือใหม่กว่า (คุณสามารถตรวจสอบล่าสุดได้ที่นี่ ) และใช้ GET / v2 / _catalog เพื่อรับรายการ

https://github.com/docker/distribution/blob/master/docs/spec/api.md#listing-repositories

รายการภาพทั้งหมดโดยตัวอย่างสคริปต์เชลล์: https://gist.github.com/OndrejP/a2386d08e5308b0776c0


7

นี่เป็นกระดาษเส้นเล็ก (ใช้ JQ) เพื่อพิมพ์รายการ Repos และแท็กที่เกี่ยวข้อง

หากคุณไม่ได้jqติดตั้งคุณสามารถใช้:brew install jq

# This is my URL but you can use any
REPO_URL=10.230.47.94:443

curl -k -s -X GET https://$REPO_URL/v2/_catalog \
 | jq '.repositories[]' \
 | sort \
 | xargs -I _ curl -s -k -X GET https://$REPO_URL/v2/_/tags/list

อาร์ฉันเพิ่งเขียนข้อความนี้แล้วก็พบว่าคุณ: S แต่ฉันจะเก็บคำตอบของฉันไว้เพราะมันแสดงวิธีจัดการกับการตรวจสอบขั้นต้นด้วยและอธิบายว่าทำไมมันถึงใช้ได้ กรองผลลัพธ์ลงในรายการรูปภาพแบบย่อด้วย
Craig Ringer

สำหรับในกรณีที่ jq ​​ไม่ได้อยู่ในลินุกซ์ distro ของคุณเอาstedolan.github.io/jq/downloadเธอ มันเป็นเครื่องมือเล็ก ๆ ที่มีประโยชน์มาก
ISQ

5

ฉันต้องทำเช่นเดียวกันที่นี่และงานข้างต้นยกเว้นฉันต้องให้รายละเอียดการเข้าสู่ระบบเพราะมันเป็นที่เก็บนักเทียบท่าท้องถิ่น

มันเป็นไปตามข้างต้น แต่ด้วยการจัดหาชื่อผู้ใช้ / รหัสผ่านใน URL

curl -k -X GET https://yourusername:yourpassword@theregistryURL/v2/_catalog

มันกลับมาเป็นรูปแบบ JSON

ฉันส่งไปยังฟอร์แมตไพ ธ อนเพื่อความสะดวกในการอ่านของมนุษย์ในกรณีที่คุณต้องการใช้มันในรูปแบบนี้

curl -k -X GET https://yourusername:yourpassword@theregistryURL/v2/_catalog | python -m json.tool

4

การใช้จุดสิ้นสุด "/ v2 / _catalog" และ "/ tags / list" คุณจะไม่สามารถแสดงภาพทั้งหมดได้ หากคุณผลักดันภาพที่แตกต่างกันไม่กี่และติดแท็กพวกเขา "ล่าสุด" คุณไม่สามารถแสดงรายการภาพเก่าจริง ๆ ! คุณยังสามารถดึงมันได้หากคุณอ้างถึงโดยใช้ไดเจสต์ "นักเทียบท่า pull ubuntu @ sha256: ac13c5d2 ... " ดังนั้นคำตอบคือ - ไม่มีวิธีแสดงรายการรูปภาพที่คุณสามารถแสดงรายการแท็กที่ไม่เหมือนกันได้


3

ถ้าบางคนไปไกลขนาดนี้

ทำในสิ่งที่คนอื่นพูดไปแล้ว นี่คือหนึ่งซับที่ทำให้คำตอบเป็นไฟล์ข้อความที่จัดรูปแบบ json

curl "http://mydocker.registry.domain/v2/_catalog?n=2000" | jq . - > /tmp/registry.lst

ดูเหมือนว่า

{
  "repositories": [
    "somerepo/somecontiner",
    "somerepo_other/someothercontiner",
 ...
  ]
}

คุณอาจต้องเปลี่ยน `? n = xxxx 'เพื่อให้ตรงกับจำนวนภาชนะที่คุณมี

ถัดไปเป็นวิธีลบคอนเทนเนอร์เก่าและคอนเทนเนอร์ที่ไม่ได้ใช้โดยอัตโนมัติ


2

ฟังก์ชันการทำงานของรีจิสทรี v2 ของนักเทียบท่าค้นหาไม่รองรับการเขียนนี้ในขณะนี้ ดูการสนทนาตั้งแต่ ก.พ. 2558: "เสนอฟังก์ชั่นการค้นหารีจิสตรี # 206" https://github.com/docker/distribution/issues/206

ฉันเขียนสคริปต์ที่คุณสามารถค้นหา: https://github.com/BradleyA/Search-docker-registry-v2-script.1.0 มันไม่สวย แต่ได้รับข้อมูลที่ต้องการจากรีจิสตรีส่วนตัว


2

ฉันเขียนเครื่องมือบรรทัดคำสั่งที่ใช้งานง่ายสำหรับการแสดงรายการรูปภาพในรูปแบบต่างๆ (เช่นแสดงรายการภาพทั้งหมดแสดงรายการแท็กทั้งหมดของภาพเหล่านั้นแสดงรายการเลเยอร์ทั้งหมดของแท็กเหล่านั้น)

นอกจากนี้ยังช่วยให้คุณสามารถลบภาพที่ไม่ได้ใช้ในรูปแบบต่าง ๆ เช่นลบเฉพาะแท็กที่เก่ากว่าของรูปภาพเดียวหรือจากรูปภาพทั้งหมดเป็นต้นวิธีนี้สะดวกเมื่อคุณกรอกข้อมูลรีจิสทรีของคุณจากเซิร์ฟเวอร์ CI และต้องการเก็บเฉพาะรุ่นล่าสุด / เสถียร

มันเขียนในหลามและไม่ต้องการให้คุณดาวน์โหลดอิมเมจรีจิสตรีแบบกำหนดเองขนาดใหญ่


2

นี่คือตัวอย่างที่แสดงรายการแท็กทั้งหมดของภาพทั้งหมดในรีจิสทรี จัดการกับรีจิสทรีที่กำหนดค่าสำหรับ HTTP Basic auth ด้วย

THE_REGISTRY=localhost:5000

# Get username:password from docker configuration. You could
# inject these some other way instead if you wanted.
CREDS=$(jq -r ".[\"auths\"][\"$THE_REGISTRY\"][\"auth\"]" .docker/config.json | base64 -d)

curl -s --user $CREDS https://$THE_REGISTRY/v2/_catalog | \
    jq -r '.["repositories"][]' | \
    xargs -I @REPO@ curl -s --user $CREDS https://$THE_REGISTRY/v2/@REPO@/tags/list | \
    jq -M '.["name"] + ":" + .["tags"][]'

คำอธิบาย:

  • แยกชื่อผู้ใช้: รหัสผ่านจาก. docker / config.json
  • ทำการร้องขอ https ไปที่รีจิสตรีเพื่อแสดงรายการ "คลังเก็บ" ทั้งหมด
  • กรองผลลัพธ์ json ไปยังรายการ flat ของชื่อที่เก็บ
  • สำหรับแต่ละชื่อที่เก็บ:
  • ทำการร้องขอ https ไปที่รีจิสตรีเพื่อแสดงรายการ "แท็ก" ทั้งหมดสำหรับ "คลังเก็บ"
  • กรองกระแสของวัตถุ json ผลการพิมพ์คู่ "พื้นที่เก็บข้อมูล": "แท็ก" สำหรับแต่ละแท็กที่พบในแต่ละพื้นที่เก็บข้อมูล

1

หัวข้อนี้วันที่กลับมาเป็นเวลานานที่สุดเครื่องมือล่าสุดที่หนึ่งควรพิจารณาและskopeocrane

skopeoรองรับการเซ็นชื่อและมีคุณสมบัติอื่น ๆ อีกมากมายในขณะที่craneเรียบง่ายขึ้นเล็กน้อยและฉันพบว่าการรวมเข้ากับสคริปต์เชลล์แบบง่ายขึ้น


0

เนื่องจากแต่ละรีจิสตรีรันเป็นคอนเทนเนอร์ ID คอนเทนเนอร์จึงมีไฟล์บันทึกที่เกี่ยวข้อง ID-json.log ไฟล์บันทึกนี้มี vars.name = [image] และ vars.reference = [tag] สคริปต์สามารถใช้ในการคาดการณ์และพิมพ์สิ่งเหล่านี้ นี่อาจเป็นวิธีหนึ่งในการแสดงรายการรูปภาพที่ถูกพุชไปยังรีจิสตรี V2-2.0.1

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.