Bagaimana cara mengubah registri buruh pelabuhan default dari docker.io ke registri pribadi saya?

124

Secara default, jika saya mengeluarkan perintah:

sudo docker pull ruby:2.2.1

itu akan menarik dari situs resmi docker.io secara default.

Pulling repository docker.io/library/ruby

Bagaimana cara mengubahnya ke registri pribadi saya. Itu artinya jika saya mengeluarkan

sudo docker pull ruby:2.2.1

itu akan menarik dari registri pribadi saya sendiri, hasilnya seperti:

Pulling repository my_private.registry:port/library/ruby
mainframer
sumber
Apakah Anda dapat menemukan cara untuk membuatnya berhasil? Saya mencari hal yang persis sama. Saya menggunakan nexus sebagai registri pribadi buruh pelabuhan saya. Saya tidak ingin menggunakan nama domain dan nomor port saya di perintah docker pull saya.
Dinesh

Jawaban:

56

PEMBARUAN: Mengikuti komentar Anda, saat ini tidak memungkinkan untuk mengubah registri default, lihat masalah ini untuk info lebih lanjut.

Anda harus dapat melakukan ini, mengganti host dan port ke milik Anda:

docker pull localhost:5000/registry-demo

Jika servernya jauh / memiliki auth, Anda mungkin perlu masuk ke server dengan:

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

Lalu lari:

docker pull <YOUR-DOMAIN>:8080/test-image
Orang
sumber
14
docker pull <YOUR-DOMAIN>:8080/test-imagebaik-baik saja. Tapi yang saya inginkan adalah docker pull test-image, tanpa spesifikasi DOMAIN dan Port dan tanpa login.
mainframer
2
Saya telah memperbarui jawaban saya berdasarkan komentar Anda. Saat ini tidak memungkinkan untuk menyetel registri default
Guy
Kemungkinan besar tidak akan pernah mungkin untuk mengatur registri default yang berbeda, karena itu melanggar namespace default yang diandalkan sebagian besar gambar
Matt
Mereka bisa melakukan sesuatu seperti @scopesdi npm untuk memperkenalkan namespace baru tanpa konflik dengan yang sudah ada. Memiliki nama host registri yang disertakan dalam nama gambar membuat cache / proxying / kunci registri di dalam perusahaan atau proyek menjadi sulit. Ini menjelaskannya dengan baik: informit.com/articles/article.aspx?p=2464012&seqNum=3
Alexander Klimetschek
Humas ini tampaknya menjadi diskusi terbaru tentang topik itu: github.com/moby/moby/pull/34319
Alexander Klimetschek
21

Ternyata ini adalah benar-benar mungkin, tetapi tidak menggunakan asli Docker CE atau EE versi.

Anda dapat menggunakan garpu Red Hat untuk buruh pelabuhan dengan tanda '--add-registry' atau Anda dapat membuat buruh pelabuhan dari sumber sendiri dengan registry / config.go yang dimodifikasi untuk menggunakan namespace / indeks registri default berkode keras Anda sendiri.

Josiah
sumber
3
Garpu RedHat adalah yang tersedia di centos-extras. Terima kasih telah membantu saya memahami mengapa setelah beralih ke versi docker.io --add-registryberhenti bekerja.
chutz
2
Anda juga dapat menggunakan --block-registry index.docker.ioopsi untuk menghapus registri default.
Evan
1
The --add-registry permintaan tarik itu tidak digabung . Fitur ini akhirnya ditolak ( # 11816 ).
Franklin Piat
9

jika Anda menggunakan distro fedora, Anda dapat mengubah file

/etc/containers/registries.conf

Menambahkan domain docker.io

Bruno Sousa Sabiá
sumber
File konfigurasi khusus redhat ini digunakan untuk memulai dockerd dengan --add-registry. Fitur ini tidak akan diadopsi oleh Docker di permintaan tarik itu tidak digabung . (juga fitur akhirnya ditolak ( # 11816 ).
Franklin Piat
6

Sepertinya itu tidak akan didukung karena fragmentasi yang akan dibuatnya dalam komunitas (yaitu dua pengguna akan mendapatkan gambar yang berbeda ubuntu:latest). Anda hanya perlu menambahkan host di depan nama gambar. Lihat masalah github ini untuk bergabung dalam diskusi.

(Catatan, ini tidak dimaksudkan sebagai komentar beropini, hanya ringkasan singkat dari diskusi yang dapat diikuti dalam masalah github yang disebutkan.)

datacarl
sumber
10
fragmentasi ya tetapi hanya dengan hari-hari awal linux akhirnya hanya ada tiga (basis sumber [arch, gentoo, slax, ...], berbasis debian [debian / ubuntu], dan berbasis redhat [enterprise linux, rhel, centos]. Akan lebih baik dari sudut pandang keamanan untuk dapat mengubah registri upstream default menjadi sesuatu yang dikelola sendiri.
Dwight Spencer
2
Mengatakan "hanya ada tiga linux, redhat, debian, dan sumber" sama seperti mengatakan "hanya ada tiga penyedia penelusuran: google, bing, dan semua penyedia penelusuran lainnya" ...
Chris Browne
4

Saya mencoba menambahkan opsi berikut di /etc/docker/daemon.json. (Saya menggunakan CentOS7)

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

setelah itu, restart daemon buruh pelabuhan. Dan itu bekerja tanpa docker.io. Saya harap seseorang ini akan membantu.

jacobdoni
sumber
Konfigurasi ini khusus untuk RedHat. The --add-registry permintaan tarik itu tidak digabung .
Franklin Piat
2

Posisi resmi Docker dijelaskan dalam masalah # 11815 :

Masalah 11815: Izinkan untuk menentukan registri default yang digunakan dalam perintah tarik

Resolusi:

Seperti yang ditunjukkan sebelumnya (# 11815), ini akan memecah namespace , dan sangat merugikan komunitas, membuat file galangan tidak lagi portabel.

[Maintainer] akan menutup ini karena alasan ini.

Red Hat memiliki implementasi khusus yang memungkinkannya (lihat anwser, tetapi ditolak oleh projet hulu Docker). Itu bergantung pada --add-registryargumen, yang diatur /etc/containers/registries.confpada RHEL / CentOS 7.

Franklin Piat
sumber
1

Sebelumnya ini bisa dicapai dengan menggunakan DOCKER_OPTSdalam /etc/default/dockerfile konfigurasi yang bekerja pada Ubuntu 14:04 dan memiliki beberapa masalah pada Ubuntu 15:04. Tidak yakin apakah ini telah diperbaiki.

Baris di bawah ini perlu masuk ke file /etc/default/dockerdi host yang menjalankan daemon buruh pelabuhan. Titik perubahan ke registri pribadi diinstal di jaringan lokal Anda. Catatan: Anda harus me-restart layanan buruh pelabuhan diikuti dengan perubahan ini.

DOCKER_OPTS="--insecure-registry <priv registry hostname/ip>:<port>"
askb
sumber
11
Bendera '--insecure-registry' memungkinkan buruh pelabuhan untuk menarik dari registri bernama tanpa otentikasi TLS. Itu tidak melakukan apa pun terhadap pengaturan registri default ketika tidak ditentukan.
Yosia
0

Saya menambahkan hingga jawaban asli yang diberikan oleh Guy yang masih berlaku hari ini (segera 2020).

Mengganti registri buruh pelabuhan default, seperti yang akan Anda lakukan dengan maven, sebenarnya bukan praktik yang baik.

Saat menggunakan maven, Anda menarik artefak dari Maven Central Repository melalui sistem manajemen repositori lokal Anda yang akan bertindak sebagai proxy. Artefak ini adalah lib (toples) mentah yang polos dan sangat kecil kemungkinannya Anda akan mendorong toples dengan nama yang sama.

Di sisi lain, gambar buruh pelabuhan sepenuhnya operasional, dapat dijalankan, lingkungan, dan sangat masuk akal untuk menarik gambar dari Docker Hub, memodifikasinya dan mendorong gambar ini di sistem manajemen registri lokal Anda dengan nama yang sama, karena itu persis apa namanya, hanya dalam konteks perusahaan Anda. Dalam hal ini, satu-satunya perbedaan antara kedua gambar tersebut adalah jalurnya !!

Oleh karena itu perlu mengatur aturan berikut: awalan suatu gambar menunjukkan asalnya; secara default jika gambar tidak memiliki prefiks, itu ditarik dari Docker Hub.

avi.elkharrat
sumber
Untuk alasan ini, repositori maven yang menyimpan rilis secara default tidak mengizinkan penimpaan dan menawarkan pengklasifikasi. Demikian pula buruh pelabuhan menggunakan tag.
karena
-5

Belum mencoba, tetapi mungkin membajak proses resolusi DNS dengan menambahkan baris /etc/hostsuntuk hub.docker.comatau sesuatu yang serupa ( docker.io?) Dapat berfungsi?

akavel
sumber
4
Itu akan meledak di tahap koneksi; server yang Anda sambungkan tidak akan memiliki sertifikat TLS yang sesuai untuk domain tersebut.
Michael Mol