Özel bir docker kayıt defterine uzaktan erişim nasıl elde edilir?


82

Https://github.com/docker/docker-registry adresinden alınan görüntüyü kullanarak özel bir docker kayıt defteri kurmaya çalışıyorum

Sadece koşarak:
docker run -p 5000:5000 registry

Bu depodan / depoya yalnızca localhost'tan çekebilir / itebilirim, ancak başka bir makineden erişmeye çalışırsam (aynı LAN'da özel bir adres kullanarak) hata mesajı vererek başarısız olur:

*2014/11/03 09:49:04 Error: Invalid registry endpoint https ://10.0.0.26:5000/v1/': 
Get https:// 10.0.0.26:5000/v1/_ping: Forbidden. If this private 
registry supports only HTTP or HTTPS with an unknown CA certificate,
please add `--insecure-registry 10.0.0.26:5000` to the daemon's 
arguments. In the case of HTTPS, if you have access to the registry's
CA certificate, no need for the flag; simply place the CA certificate 
at /etc/docker/certs.d/10.0.0.26:5000/ca.crt*

Beni çıldırtan şey şudur: curl 10.0.0.26:5000 ve / veyacurl 10.0.0.26:5000/v1/search

--insecure-registryBayrağı nerede ve nasıl geçirmem gerektiğini de anlamıyorum .


3
cevapların çoğu docker 1.12 için güncel değil gibi görünüyor ancak docker 1.12 için harika olan vikas027 cevabına bakın (en son ATOW)
danday74

1
Ubuntu'da Docker belgeleri ve bu yanıt benim için iyi çalıştı.
Batandwa

Yanıtlar:


73

Tamam - bunun çözümünü buldum - kazarak geçen bir günden sonra.

1.12.1'in altındaki docker için:

Yeni istemci sürümünün, SSL olmadan özel bir kayıt defteri ile çalışmayı reddettiği ortaya çıktı.

Bunu düzeltmek için, istemci makinedeki arka plan programı güvenli olmayan bayrakla başlatılmalıdır:

Sadece yaz:

sudo service docker stop # to stop the service

ve sonra

sudo docker -d --insecure-registry 10.0.0.26:5000

( 10.0.0.26kendi ip adresinizle değiştirin).

Docker çalışanlarının bu seçeneği pull / push komut satırına eklemesini beklerdim ...

Düzenleme - altenantively - DOCKER_OPTS/ etc / default / docker ... içindeki env değişkenine bayrağı ekleyebilirsiniz ve sonrasudo service docker restart

Tekrar düzenle - Görünüşe göre liman işçileri üzerinde - ve yakında bir düzeltme gelecek: https://github.com/docker/docker/pull/8935

Docker 1.12.1 için:

Lütfen vikas027'nin cevabını takip edin (centos için geçerlidir)


Adımlarınızı kopyalayabildim ve uzaktaki bir ana bilgisayardaki özel bir kayıt defterine gönderdim. Aynı zamanda başarılı bir itme gösterdi. Ancak, görüntüleri özel kayıt defterinde nasıl listeleyebilirim? Denedim docker -H tcp://remote-host-ip:5000 imagesama hata ile döndüm.
Howard Lee

Bunun olduğunu doğrulayabilirim. <ip>: 5000 / v1 / search - boş yanıt alırsınız. Muhtemelen sahip oldukları farklı bir hata :-(
Ofer Eliassaf

Güncelleme: Uzak bir özel kayıt defterinde depolanan resimleri arayabildim / çekebildim. docker search remote-host-ip:5000/image-nameve docker pull remote-host-ip:5000/image-nameher ikisi de gayet iyi çalışıyor. Şimdi, görüntüleri listelemek için nasıl elde edebilirim ...
Howard Lee

3
@ashleyaitken, Boot2Docker ile çözmeme yardımcı olması için aşağıdaki referansı kullandım: github.com/boot2docker/boot2docker#insecure-registry . Umarım yardımcı olur.
Patelify

1
--insecure-registrybir çözümdür ve bir düzeltme değildir.
peterh

28

Bu benim için CentOS 7.2 ve Docker 1.12.1'de işe yarayan şeydi (en son tarih). Özel kayıt defterim v2 çalışıyordu 192.168.1.88:5000, buna göre değiştirin. Bu, birden fazla kaydın varsa da işe yarar, eklemeye devam et--insecure-registry IP:Port

$ sudo vim /usr/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd 
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.88:5000
$
$ sudo systemctl stop docker
$ sudo systemctl daemon-reload
$ systemctl start docker

1
Bu çözüm, Ubuntu'da benim için çalışan tek çözümdü.
JARC

1
Teşekkürler adamım - harika çalıştı - kurumsal bir proxy'nin arkasındakiler için buna dayalı daha eksiksiz bir cevap ekledi
danday74

2
Benim için çalıştı ama docker.service /lib/systemd/system/docker.serviceUbuntu 16.04'teydi .
Karim Tabet

4
--insecure-registrybir çözümdür ve bir düzeltme değildir.
peterh - Monica'yı eski haline getir

1
iş. Veya tüm sisteminizi hacklemeniz gerekir (başka bir benzer "özellik" de, "köprülü ağ" aslında docker'da NAT ağı anlamına gelirken gerçek köprülü ağ mevcut değildir). Bu yanıtlar, kolayca düzeltilebilen ancak bir şekilde çözülemeyen büyük sorunlara yönelik korkunç geçici çözümleri popüler hale getirir. Hepsine olumsuz oy vermemin nedeni buydu - hepsi kötü çözümler.
peterh

24

"/ Etc / default / docker" yapılandırma dosyasını düzenleyin

sudo vi / etc / varsayılan / docker

satırı dosyanın sonuna ekle

DOCKER_OPTS = "$ DOCKER_OPTS --insecure-kayıt = 192.168.2.170: 5000"

(192.168.2.170'i kendi ip adresinizle değiştirin)

ve docker hizmetini yeniden başlatın

sudo hizmet docker yeniden başlat


Teşekkürler! Düzenleme /etc/init.d/dockerşaşırtıcı Ubuntu 14.04 çalışmıyor sadece düz out. Ama senin düzeltmen /etc/default/dockervar.
elimisteve

benim ana bilgisayar sistemim de Ubuntu
14.04

1
--insecure-registrybir çözümdür ve bir düzeltme değildir.
peterh - Monica'yı eski haline getir

12

Docker hizmetinin kendisinin nasıl yapılandırıldığını tartıştığı için aşağıdakileri çok yararlı buldum. https://docs.docker.com/articles/systemd/

Systemctl komutuyla bu makale ile birlikte https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units

Centos 7 tabanlı bir kapsayıcıda, "docker pull kayıt defteri: 2.1.1" tarafından elde edilen bir kayıt defteri görüntüsüyle aşağıdaki komut dizisini kullandım

sudo mkdir -p /etc/systemd/system/docker.service.d
cd /etc/systemd/system/docker.service.d
sudo touch override.conf
sudo nano override.conf

Ve override.conf dosyasının içine aşağıdakileri ekledi.

[Service]
ExecStart=
ExecStart=/usr/bin/docker -d -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry 10.2.3.4:5000

İlk boşluğa dikkat edin, ExecStart = zaten mevcut olan her şeyi temizler, bu nedenle korumak istediğiniz /usr/lib/systemd/system/docker.service ExecStart = ifadesinden herhangi bir şey eklediğinizden emin olun.

-D (daemon) seçeneğini belirtmezseniz, "Lütfen yalnızca bir -H belirtin" hatası alırsınız.

Aşağıdaki komut dizisini verdikten sonra geçersiz kılmalarımı yerinde görebilirim.

sudo systemctl stop docker
sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl status docker

docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
  Drop-In: /etc/systemd/system/docker.service.d
           └─override.conf
   Active: active (running) since Thu 2015-09-17 13:37:34 AEST; 7s ago
     Docs: https://docs.docker.com
 Main PID: 5697 (docker)
   CGroup: /system.slice/docker.service
           └─5697 /usr/bin/docker -d -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry 10.2.3.4:5000

NOT: Durum mesajındaki Loaded: ve Drop-In: satırları tarafından sağlanan bilgiler, önceden var olan bir docker daemon ile çalışmak için neler olup bittiğini kontrol etmek için kullanışlıdır.

NOT: Daha fazla ipucu için bir EnvironmentFile = için Loaded: docker.service dosyasına da bakın.


2
--insecure-registrybir çözümdür ve bir düzeltme değildir.
peterh - Monica'yı eski haline getir

Merhaba @ peterh Bunun bir geçici çözüm ve güvensiz bir çözüm olduğunu anlıyorum. Hiç şüphem yok, onu kullanan Üretim sistemleri var ki bu gerçekten çok kötü bir şey.
TJA

1
@peterh, nasıl yapılacağını gösteren herhangi bir bağlantıya işaret eder misiniz, cevabımı güncelleyip bağlantıya atıfta bulunacağım.
TJA

11

Tamam. İşte onu nasıl çalıştırdım. Docker 1.3.2 veya üzerinde bu hatayı görüyorsanız, bunu yapın

git /etc/sysconfig/docker

other_args="--insecure-registry 10.0.0.26:5000"

ve koş

sudo service docker restart


1
ubuntu altındaki kayıt değerini etkilemek için bir '=' koymanız gerekir: "- insecure-registry = 10.0.0.26: 5000"
Romain Jouin

@Jay ben bir noob. 1.3.2, docker'ın gelecekteki bir sürümü gibi görünüyor. Burada yanılmıyorsam mevcut sürümün 1.12 github.com/docker/docker/releases olduğunu görüyorum .
ravindrab

1
@ravindrab hangi evrende 12, 3'ten küçüktür? ;)
ferrari2k

2
--insecure-registrybir çözümdür ve bir düzeltme değildir.
peterh - Monica'yı eski haline getir

9

{YOUR_REGISTRY} 'yi kayıt defterinizle değiştirerek aşağıdaki komutu kullanın

boot2docker ssh "echo $'EXTRA_ARGS=\"--insecure-registry {YOUR_REGISTRY}\"' | sudo tee -a /var/lib/boot2docker/profile && sudo /etc/init.d/docker restart"

boot2dockersoru bağlamıyla ilgisi olmayan bağımsız bir araç setidir.
Arnaud Meuret

2
--insecure-registrybir çözümdür ve bir düzeltme değildir.
peterh - Monica'yı eski haline getir

7

docker.service dosyasını düzenleyin, --insecure-kayıt defteri xxxx sonra -d işaretini ekleyin, docker'ı yeniden başlatın

bu benim için işe yarayan tek şeydi, DOCKER_OPTS'in hiçbir etkisi olmadı


söylediğin her şey doğru ama detay o kadar az ki cevap neredeyse işe yaramaz
danday74

2
--insecure-registrybir çözümdür ve bir düzeltme değildir.
peterh - Monica'yı yeniden etkinleştir

4

Docker 1.12.1

İçin CentOS 7.2

/usr/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd
ExecStart=/usr/bin/dockerd --insecure-registry my-docker-registry.com:5000

İçin ubuntu 16.04

/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd -H fd://
ExecStart=/usr/bin/dockerd --insecure-registry my-docker-registry.com:5000 -H fd://

sudo systemctl stop docker
sudo systemctl daemon-reload
sudo systemctl start docker

Görünüşe göre --insecure-kayıt seçeneği, kendisiyle kayıt kimliği arasında "=" ile veya olmadan kullanılabilir.


2
--insecure-registrybir çözümdür ve bir düzeltme değildir.
peterh - Monica'yı yeniden etkinleştir

2

Docker istemci sürümü ile kayıt defteri docker sürümünün eşleşmesi gerektiğini buldum, aksi takdirde her şey yerinde olmasına rağmen bağlantı sorunları yaşarsınız.


2

İki adımlı çözüm (olmadan --insecure-registry):

  1. Kayıt defterinizden genel anahtarı indirin
  2. /etc/docker/certs.d/$HOSTNAME/Dizine koy

 

mkdir -p /etc/docker/certs.d/10.0.0.26:5000
echo -n | openssl s_client -connect 10.0.0.26:5000 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/docker/certs.d/10.0.0.26:5000/registry.crt

Artık docker'ınız kendinden imzalı sertifikanıza güvenecek.


1

Bu, vikas027'nin Centos 7 ve Docker 1.12 üzerindeki yanıtına dayanmaktadır.

Bir vekilin arkasında olduğum için tam çözümüm ...

/etc/systemd/system/docker.service.d/http-proxy.conf

[Service]

Environment="FTP_PROXY={{MY_PROXY}}"
Environment="ftp_proxy={{MY_PROXY}}"

Environment="HTTPS_PROXY={{MY_PROXY}}"
Environment="https_proxy={{MY_PROXY}}"

Environment="HTTP_PROXY={{MY_PROXY}}"
Environment="http_proxy={{MY_PROXY}}"

Environment="NO_PROXY=localhost,127.0.0.1,{{MY_INSECURE_REGISTRY_IP}}"
Environment="no_proxy=localhost,127.0.0.1,{{MY_INSECURE_REGISTRY_IP}}"

/usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd --insecure-registry {{MY_INSECURE_REGISTRY_IP}}:5000

ve yeniden başlatmayı unutmayın :)

sudo systemctl daemon-reload; sudo systemctl restart docker;

1
--insecure-registrybir çözümdür ve bir düzeltme değildir.
peterh - Monica'yı yeniden etkinleştir

0

Docker'da proxy ile birlikte Yerel güvenli olmayan kayıt ayarlama

1) ubuntu'da şu bayrağı ekleyin --insecure-kayıt IP'si: DOCKER_OPTS altındaki bağlantı noktası / etc / default / docker dosyasında

1.1) no_proxy env değişkenini yerel IP / ana bilgisayar adı / etki alanı adını atlayacak şekilde yapılandırın ... proxy, devam gibi etkileşimli bir mesaj atabilir ve bu ara mesaj, docker istemcisini karıştırır ve sonunda zaman aşımına neden olur ...

1.2) alan adı yapılandırılmışsa ... DNS kullanmıyorsanız / etc / hosts dosyasını güncellemeyi unutmayın.

1.3) / etc / default / docker içinde, dış şirket merkezlerinden imajların indirilmesini mümkün kıldığı için http_proxy ve https_proxy ... env değişkenlerini ayarlayın. format http_proxy = http: // kullanıcı adı: şifre @ proxy: bağlantı noktası

2) docker hizmetini yeniden başlatın ... hizmet olarak kuruluysa, sudo hizmet docker yeniden başlatmayı kullanın

3) kayıt kapsayıcısını yeniden başlatın [sudo docker run -p 5000: 5000 kayıt: 2]

4) gerekli görüntüyü sudo docker etiketi görüntü kimliği IP'sini kullanarak etiketleyin: bağlantı noktası / görüntüadı / tagname ifany

5) görüntüyü itin ... sudo docker push ip: port / imagename

6) Başka bir makineden görüntüyü TLS / SSL olmadan çekmek istiyorsanız, o zaman B'de 1.1.1 ve 2. setleri uygulayın. Bu değişiklikler makine B'de yapılmazsa ... çekme başarısız olur.


2
--insecure-registrybir çözümdür ve bir düzeltme değildir.
peterh


0

Ubuntu 16.04

/etc/systemd/system/docker.service.d/registry.confİçeriğe sahip (mevcut değil) dosya oluşturun:

[Service]
#You need the below or you 'ExecStart=' or you will get and error 'Service has more than one ExecStart= setting, which is only allowed'
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 10.20.30.40:5000

sonra

sudo systemctl stop docker
sudo systemctl daemon-reload
sudo systemctl start docker

0

Yukarıdaki yanıtlara ek olarak, benim için "mac için docker" da işe yarayanları ekliyorum:

  1. Ekranınızın sağ üst köşesindeki mac tepsisinden docker balina simgesine tıklayın .
  2. Tercihler -> Daemon'a tıklayın .
  3. Güvenli olmayan kayıtlara IP'nizi ve bağlantı noktanızı ekleyin.
  4. Daemon'u yeniden başlatın.

görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.