จะเปลี่ยนรีจิสทรีนักเทียบท่าเริ่มต้นจาก docker.io เป็นรีจิสตรีส่วนตัวของฉันได้อย่างไร


124

ตามค่าเริ่มต้นถ้าฉันออกคำสั่ง:

sudo docker pull ruby:2.2.1

มันจะดึงออกจากไซต์ทางการของ docker.io ตามค่าเริ่มต้น

Pulling repository docker.io/library/ruby

ฉันจะเปลี่ยนเป็นรีจิสตรีส่วนตัวได้อย่างไร นั่นหมายความว่าถ้าฉันออก

sudo docker pull ruby:2.2.1

มันจะดึงมาจากรีจิสตรีส่วนตัวของฉันเองผลลัพธ์จะเป็นดังนี้:

Pulling repository my_private.registry:port/library/ruby

คุณสามารถหาวิธีที่จะทำให้มันใช้งานได้หรือไม่? ฉันกำลังมองหาสิ่งเดียวกัน ฉันใช้ Nexus เป็นรีจิสทรีส่วนตัวของนักเทียบท่า ฉันไม่ต้องการใช้ชื่อโดเมนและหมายเลขพอร์ตในคำสั่ง docker pull ของฉัน
Dinesh

คำตอบ:


56

อัปเดต: ตามความคิดเห็นของคุณขณะนี้ยังไม่สามารถเปลี่ยนรีจิสทรีเริ่มต้นได้โปรดดูข้อมูลเพิ่มเติมที่ปัญหานี้

คุณควรจะทำได้โดยเปลี่ยนโฮสต์และพอร์ตเป็นของคุณเอง:

docker pull localhost:5000/registry-demo

หากเซิร์ฟเวอร์เป็นแบบรีโมต / มีการตรวจสอบสิทธิ์คุณอาจต้องล็อกอินเข้าสู่เซิร์ฟเวอร์ด้วย:

docker login https://<YOUR-DOMAIN>:8080

จากนั้นวิ่ง:

docker pull <YOUR-DOMAIN>:8080/test-image

14
docker pull <YOUR-DOMAIN>:8080/test-imageก็โอเค แต่สิ่งที่ฉันต้องการคือdocker pull test-imageซึ่งไม่ต้อง spesifying DOMAIN และ Port และไม่ต้องเข้าสู่ระบบ
เมนเฟรม

2
ฉันได้อัปเดตคำตอบตามความคิดเห็นของคุณ ขณะนี้ยังไม่สามารถตั้งค่ารีจิสทรีเริ่มต้นได้
Guy

ไม่น่าจะเป็นไปได้ที่จะตั้งค่ารีจิสทรีเริ่มต้นที่แตกต่างกันเนื่องจากมันทำลายเนมสเปซเริ่มต้นที่รูปภาพส่วนใหญ่ต้องพึ่งพา
Matt

พวกเขาสามารถทำบางอย่างเช่น@scopesใน npm เพื่อแนะนำเนมสเปซใหม่โดยไม่ขัดแย้งกับที่มีอยู่ การมีชื่อโฮสต์ของรีจิสทรีรวมอยู่ในชื่อรูปภาพทำให้การแคช / พร็อกซี / การล็อกรีจิสทรีภายใน บริษัท หรือโครงการทำได้ยาก สิ่งนี้อธิบายได้ดี: informit.com/articles/article.aspx?p=2464012&seqNum=3
Alexander Klimetschek

การประชาสัมพันธ์นี้ดูเหมือนจะเป็นการสนทนาล่าสุดของหัวข้อนั้น: github.com/moby/moby/pull/34319
Alexander Klimetschek

21

ปรากฎว่าเป็นไปได้จริง แต่ไม่ได้ใช้ Docker CE หรือ EE เวอร์ชันของแท้

คุณสามารถใช้ fork of docker ของ Red Hat กับแฟล็ก '--add-Registry' หรือคุณสามารถสร้างนักเทียบท่าจากซอร์สด้วยตัวคุณเองโดยใช้รีจิสตรี / config.go แก้ไขเพื่อใช้เนมสเปซ / ดัชนีรีจิสตรีเริ่มต้นแบบฮาร์ดโค้ดของคุณเอง


3
ส้อมของ RedHat เป็นส้อมที่มีจำหน่ายใน centos-extras ขอบคุณที่ช่วยให้ฉันเข้าใจว่าทำไมหลังจากเปลี่ยนไปใช้เวอร์ชัน docker.io --add-registryจึงหยุดทำงาน
chutz

2
คุณยังสามารถใช้--block-registry index.docker.ioตัวเลือกเพื่อกำจัดรีจิสทรีเริ่มต้น
Evan

1
--add-registry คำขอดึงถูกไม่ได้รวม ฟีเจอร์นี้ถูกปฏิเสธในที่สุด ( # 11816 )
Franklin Piat

9

หากคุณกำลังใช้ fedora distro คุณสามารถเปลี่ยนไฟล์ได้

/etc/containers/registries.conf

การเพิ่มโดเมน docker.io


แฟ้มการกำหนดค่านี้โดยเฉพาะ RedHat --add-registryจะใช้ในการเริ่มต้นกับ คุณลักษณะนี้จะไม่ถูกนำมาใช้โดยการเทียบท่าในคำขอดึงถูกไม่ได้รวม (ในที่สุดคุณลักษณะก็ถูกปฏิเสธ ( # 11816 )
Franklin Piat

6

ดูเหมือนว่าจะไม่ได้รับการสนับสนุนเนื่องจากการแยกส่วนจะสร้างขึ้นภายในชุมชน (เช่นผู้ใช้สองคนจะได้รับภาพที่แตกต่างกันubuntu:latest) คุณต้องเพิ่มโฮสต์หน้าชื่อภาพ ดูปัญหา github นี้เพื่อเข้าร่วมการสนทนา

(หมายเหตุนี่ไม่ได้มีไว้เพื่อเป็นการแสดงความคิดเห็นเป็นเพียงบทสรุปสั้น ๆ ของการสนทนาที่สามารถติดตามได้ในปัญหา Github ที่กล่าวถึง)


10
การแยกส่วนใช่ แต่ในช่วงแรก ๆ ของลินุกซ์ในที่สุดก็กลายเป็นเพียงสาม (source base [arch, gentoo, slax, ... ], debian based [debian / ubuntu] และ redhat based [enterprise linux, rhel, centos] มันจะดีกว่าจากจุดยืนด้านความปลอดภัยที่จะสามารถเปลี่ยนรีจิสตรีต้นน้ำเริ่มต้นเป็นสิ่งที่จัดการได้เอง
Dwight Spencer

2
การพูดว่า "มีลินุกซ์เพียงสามตัวคือเรดแฮทเดเบียนและซอร์ส" ก็เหมือนกับการพูดว่า "มีผู้ให้บริการค้นหาเพียงสามรายเท่านั้นคือ google, bing และผู้ให้บริการการค้นหาอื่น ๆ ทั้งหมด" ...
Chris Browne

4

ฉันพยายามเพิ่มตัวเลือกต่อไปนี้ใน /etc/docker/daemon.json (ฉันใช้ CentOS7)

"add-registry": ["192.168.100.100:5001"],
"block-registry": ["docker.io"],

หลังจากนั้นรีสตาร์ท Docker daemon และมันใช้งานได้โดยไม่ต้องใช้ docker.io ฉันหวังว่าคนนี้จะเป็นประโยชน์


การกำหนดค่านี้เฉพาะสำหรับ RedHat --add-registry คำขอดึงถูกไม่ได้รวม
Franklin Piat

2

ตำแหน่งอย่างเป็นทางการของ Docker อธิบายไว้ในฉบับ# 11815 :

ปัญหา 11815: อนุญาตให้ระบุรีจิสเตอร์เริ่มต้นที่ใช้ในคำสั่งดึง

ความละเอียด:

เช่นเดียวกับที่ระบุไว้ก่อนหน้านี้ (# 11815) สิ่งนี้จะทำให้เนมสเปซแยกส่วนและทำร้ายชุมชนค่อนข้างแย่ทำให้ dockerfiles ไม่พกพาได้อีกต่อไป

[ผู้ดูแลระบบ] จะปิดสิ่งนี้ด้วยเหตุนี้

Red Hat มีการใช้งานเฉพาะที่อนุญาต (ดู anwser แต่Docker upstream projet ปฏิเสธ ) มันอาศัย--add-registryอาร์กิวเมนต์ซึ่งตั้งค่าไว้/etc/containers/registries.confที่ RHEL / CentOS 7


1

ก่อนหน้านี้สามารถทำได้โดยใช้DOCKER_OPTSใน/etc/default/dockerไฟล์ config ที่ทำงานบน Ubuntu 14:04 และมีบางประเด็นที่บน Ubuntu 15:04 ไม่แน่ใจว่าได้รับการแก้ไขแล้ว

บรรทัดด้านล่างจำเป็นต้องเข้าไปในไฟล์/etc/default/dockerบนโฮสต์ซึ่งรัน Docker daemon จุดการเปลี่ยนแปลงไปยังรีจิสทรีส่วนตัวถูกติดตั้งในเครือข่ายท้องถิ่นของคุณ หมายเหตุ: คุณจะต้องรีสตาร์ทบริการนักเทียบท่าตามด้วยการเปลี่ยนแปลงนี้

DOCKER_OPTS="--insecure-registry <priv registry hostname/ip>:<port>"

11
แฟล็ก '--insecure-Registry' ช่วยให้นักเทียบท่าสามารถดึงจากรีจิสทรีที่มีชื่อโดยไม่ต้องมีการตรวจสอบความถูกต้อง TLS ไม่มีอะไรในการตั้งค่ารีจิสทรีเริ่มต้นเมื่อไม่ได้ระบุไว้
Josiah

0

ฉันกำลังเพิ่มคำตอบเดิมที่ให้โดย Guy ซึ่งยังใช้ได้ในวันนี้ (เร็ว ๆ นี้ 2020)

การลบล้างรีจิสทรีนักเทียบท่าเริ่มต้นเช่นเดียวกับที่คุณทำmavenนั้นไม่ใช่แนวทางปฏิบัติที่ดี

เมื่อใช้mavenคุณจะดึงอาร์ติแฟกต์จาก Maven Central Repository ผ่านระบบการจัดการที่เก็บในเครื่องของคุณซึ่งจะทำหน้าที่เป็นพร็อกซี สิ่งประดิษฐ์เหล่านี้เป็น libs ดิบ (ไห) ธรรมดาและไม่น่าเป็นไปได้ที่คุณจะผลักไหที่มีชื่อเดียวกัน

ในทางกลับกันอิมเมจนักเทียบท่าสามารถใช้งานได้อย่างสมบูรณ์รันได้สภาพแวดล้อมและทำให้รู้สึกได้อย่างเต็มที่ในการดึงภาพจาก Docker Hub แก้ไขและพุชอิมเมจนี้ในระบบการจัดการรีจิสตรีในเครื่องของคุณด้วยชื่อเดียวกันเพราะมันตรงกัน ชื่อของมันคืออะไรในบริบทองค์กรของคุณ ในกรณีนี้ความแตกต่างเพียงอย่างเดียวระหว่างสองภาพก็คือเส้นทางของมัน !!

ดังนั้นจึงจำเป็นต้องตั้งกฎต่อไปนี้: คำนำหน้าของภาพระบุที่มา; โดยค่าเริ่มต้นหากรูปภาพไม่มีคำนำหน้าภาพจะถูกดึงออกจาก Docker Hub


ด้วยเหตุนี้ที่เก็บ maven การจัดเก็บรีลีสโดยค่าเริ่มต้นจึงไม่อนุญาตให้เขียนทับและเสนอตัวแยกประเภท ในทำนองเดียวกันนักเทียบท่าใช้แท็ก
coz

-5

ยังไม่ได้ลอง แต่อาจจะหักหลังกระบวนการแก้ปัญหา DNS โดยการเพิ่มบรรทัด/etc/hostsสำหรับhub.docker.comหรือสิ่งที่คล้ายกัน ( docker.io?) สามารถทำงานได้?


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