개인 도커 레지스트리에 원격 액세스하는 방법은 무엇입니까?


82

https://github.com/docker/docker-registry 에서 가져온 이미지를 사용하여 개인 도커 레지스트리를 설정하려고합니다.

다음을 실행하면됩니다.
docker run -p 5000:5000 registry

localhost에서만이 리포지토리를 가져 오거나 내보낼 수 있지만 다른 컴퓨터에서 액세스하려고하면 (동일한 LAN의 개인 주소를 사용하여) 오류 메시지와 함께 실패합니다.

*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*

어떤 날 미치게하는 것은 내가 사용 성공적으로 액세스 할 수 있습니다 :를 curl 10.0.0.26:5000 및 / 또는curl 10.0.0.26:5000/v1/search

나는 또한 --insecure-registry깃발을 어디에서 어떻게 통과해야하는지 이해하지 못합니다 .


3
많은 답변이 docker 1.12에 대해 구식 인 것 같지만 docker 1.12 (최신 ATOW)에 적합한 vikas027 답변을 참조하십시오
danday74

1
우분투에서 부두 노동자 문서이 대답은 나를 위해 잘 작동.
Batandwa

답변:


73

OK-나는 이것에 대한 해결책을 찾았습니다.

1.12.1 미만의 도커의 경우 :

새 클라이언트 버전은 SSL이없는 개인 레지스트리 작업을 거부합니다.

이 문제를 해결하려면 클라이언트 시스템의 데몬이 안전하지 않은 플래그로 시작되어야합니다.

다음을 입력하십시오.

sudo service docker stop # to stop the service

그리고

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

( 10.0.0.26자신의 IP 주소로 대체하십시오 ).

docker 녀석이 pull / push 명령 줄에이 옵션을 추가 할 것으로 예상합니다.

편집-대체- DOCKER_OPTS/ etc / default / docker ... 안의 env 변수에 플래그를 추가 할 수 있습니다.sudo service docker restart

다시 편집하십시오-docker 사람이있는 것 같습니다-곧 수정 될 것입니다 : https://github.com/docker/docker/pull/8935

Docker 1.12.1의 경우 :

vikas027의 답변 아래를 따르십시오 (centos에 유효)


단계를 복제하고 원격 호스트의 개인 레지스트리로 푸시 할 수있었습니다. 또한 성공적인 푸시를 보여주었습니다. 그러나 개인 레지스트리에 이미지를 나열하려면 어떻게합니까? 시도 docker -H tcp://remote-host-ip:5000 images했지만 오류가 발생했습니다.
Howard Lee

이런 일이 발생하는지 확인할 수 있습니다. <ip> : 5000 / v1 / search를 쿼리 할 때도 발생합니다. 빈 응답이 표시됩니다. 아마도 그들이 가지고있는 다른 버그 일 것입니다 :-(
Ofer Eliassaf

업데이트 : 원격 개인 레지스트리에 저장된 이미지를 검색 / 가져올 수있었습니다. docker search remote-host-ip:5000/image-name그리고 docker pull remote-host-ip:5000/image-name두 기능을 잘. 이제 이미지를 나열하려면 어떻게해야하나요?
Howard Lee

3
@ashleyaitken, Boot2Docker로 해결하는 데 도움이되는 다음 참조를 사용했습니다. github.com/boot2docker/boot2docker#insecure-registry . 도움이되기를 바랍니다.
Patelify 2015 년

1
--insecure-registry해결 방법이며 수정 사항이 아닙니다.
peterh-Monica 복원

28

이것이 CentOS 7.2Docker 1.12.1 (최신 날짜) 에서 저에게 효과적 이었습니다. 내 개인 레지스트리 v2가에서 실행 중 이었으므로 192.168.1.88:5000그에 따라 변경하십시오. 레지스트리가 여러 개인 경우에도 작동합니다.--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
이 솔루션은 Ubuntu에서 나를 위해 일한 유일한 솔루션이었습니다.
JARC

1
감사합니다 남자 - 위대한 일 - 추가 된 기업의 프록시 뒤에있는 사람들을 위해이에 따라 풀러 대답
danday74

2
나를 위해 일했지만 docker.service는 /lib/systemd/system/docker.serviceUbuntu 16.04에있었습니다.
Karim Tabet 2016 년

4
--insecure-registry해결 방법이며 수정 사항이 아닙니다.
peterh-Monica 복원

1
작업. 또는 전체 시스템을 해킹해야합니다 (다른 유사한 "기능"은 "브리지 네트워킹"이 실제로 도커에서 NAT 네트워킹을 의미하지만 실제 브리지 네트워크는 존재하지 않는다는 것입니다). 이 답변은 쉽게 해결할 수 있지만 어떻게 든 그렇지 않은 주요 문제에 대한 끔찍한 해결 방법을 대중화합니다. 이것이 제가 그들 모두를 반대표를 던진 이유 입니다. 모두 나쁜 해결책입니다.
peterh-Monica 복원

24

구성 파일 "/ etc / default / docker"편집

sudo vi / etc / default / docker

파일 끝에 줄 추가

DOCKER_OPTS = "$ DOCKER_OPTS --insecure-registry = 192.168.2.170 : 5000"

(192.168.2.170을 자신의 IP 주소로 대체하십시오)

도커 서비스를 다시 시작하십시오.

sudo 서비스 도커 다시 시작


감사! /etc/init.d/docker놀랍게도 우분투 14.04에서는 평평하게 편집하는 것이 작동하지 않습니다. 그러나 당신의 수정은 /etc/default/docker않습니다.
elimisteve

내 호스트 시스템도 우분투 14.04입니다
daozhao

1
--insecure-registry해결 방법이며 수정 사항이 아닙니다.
peterh-Monica 복원

12

Docker 서비스 자체가 구성되는 방법에 대해 논의 할 때 다음이 매우 유용하다는 것을 알았습니다. https://docs.docker.com/articles/systemd/

systemctl 명령에 대한이 기사와 함께 https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units

"docker pull registry : 2.1.1"에서 얻은 레지스트리 이미지와 함께 Centos 7 기반 컨테이너에서 다음과 같은 일련의 명령을 사용했습니다.

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

그리고 override.conf 안에 다음이 추가되었습니다.

[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

첫 번째 비어있는 ExecStart =는 이미 제자리에있는 모든 항목을 지우므로 유지하려는 /usr/lib/systemd/system/docker.service ExecStart = 문에서 모든 항목을 추가해야합니다.

-d (daemon) 옵션을 지정하지 않으면 "Please specify only one -H"오류가 발생합니다.

다음과 같은 일련의 명령을 실행 한 후 제 위치에있는 재정의를 볼 수 있습니다.

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

참고 : 상태 메시지의 Loaded : 및 Drop-In : 줄에서 제공하는 정보는 기존 docker 데몬이 작동하는 상황을 확인하는 데 유용합니다.

참고 : 추가 단서를 보려면 Loaded : docker.service 파일에서 EnvironmentFile =을 확인하십시오.


2
--insecure-registry해결 방법이며 수정 사항이 아닙니다.
peterh-Monica 복원

안녕하세요 @peterh 나는 그것이 해결 방법이며 안전하지 않은 것임을 이해합니다. 나는 그것을 사용하는 생산 시스템이 있다는 것은 의심 할 여지가 없다. 이것은 정말로 매우 나쁜 일이다.
TJA

1
@peterh를 올바르게 수행하는 방법을 보여주는 링크를 알려 주시면 답변을 업데이트하고 링크를 참조하겠습니다.
TJA

11

확인. 다음은 내가 작동하게하는 방법입니다. docker 1.3.2 이상에서이 오류가 표시되면 다음을 수행하십시오.

이동 /etc/sysconfig/docker

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

그리고 실행

sudo service docker restart


1
당신은 우분투에서 레지스트리 값에 영향을 미칠하는 '='를 추가해야한다 "- 불안 - 레지스트리 = 10.0.0.26 : 5000"
로맹 Jouin

@Jay 나는 멍청이입니다. 1.3.2는 도커의 미래 버전처럼 들립니다. 여기에서 착각하지 않으면 현재 버전이 1.12 github.com/docker/docker/releases임을 알 수 있습니다.
ravindrab

1
@ravindrab은 어떤 우주에서 12가 3보다 작습니까? ;)
ferrari2k

2
--insecure-registry해결 방법이며 수정 사항이 아닙니다.
peterh-Monica 복원

9

다음 명령을 사용하여 {YOUR_REGISTRY}를 레지스트리로 바꿉니다.

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

boot2docker질문 컨텍스트와 무관 한 독립적 인 도구 키트입니다.
Arnaud Meuret 2015 년

2
--insecure-registry해결 방법이며 수정 사항이 아닙니다.
peterh-Monica 복원

7

docker.service 파일 편집, -d 플래그 뒤에 --insecure-registry xxxx 추가, docker 다시 시작

이것이 나를 위해 일한 유일한 것입니다. DOCKER_OPTS는 효과가 없었습니다.


당신이 말하는 모든 것이 사실이지만 세부 대답은 거의 쓸모가 너무 부족한 것입니다
danday74가

2
--insecure-registry해결 방법이며 수정 사항이 아닙니다.
peterh-Monica 복원

4

Docker 1.12.1

의 경우 에 CentOS 7.2

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

들어 우분투 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

--insecure-registry 옵션은 레지스트리 ID와 "="를 포함하거나 포함하지 않고 모두 사용할 수 있습니다.


2
--insecure-registry해결 방법이며 수정 사항이 아닙니다.
peterh-Monica 복원

2

도커 클라이언트 버전과 레지스트리 도커 버전이 일치해야합니다. 그렇지 않으면 모든 것이 제자리에 있음에도 불구하고 연결 문제가 발생합니다.


2

2 단계 솔루션 (제외 --insecure-registry) :

  1. 레지스트리에서 공개 키 다운로드
  2. /etc/docker/certs.d/$HOSTNAME/디렉토리에 넣어

 

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

이제 Docker는 자체 서명 된 인증서를 신뢰합니다.


1

이것은 Centos 7 및 Docker 1.12의 vikas027의 답변을 기반으로합니다.

내가 프록시 뒤에 있기 때문에 내 전체 솔루션은 ...

/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

그리고 다시 시작하는 것을 잊지 마십시오 :)

sudo systemctl daemon-reload; sudo systemctl restart docker;

1
--insecure-registry해결 방법이며 수정 사항이 아닙니다.
peterh-Monica 복원

0

프록시와 함께 Docker에서 로컬 안전하지 않은 레지스트리 설정 :

1) 우분투에서 / etc / default / docker 파일의 DOCKER_OPTS 아래에 다음 플래그 --insecure-registry IP : port를 추가하십시오.

1.1) no_proxy env 변수를 구성하여 로컬 IP / 호스트 이름 / 도메인 이름을 우회 할 수 있습니다 ... 프록시가 계속해서 대화 형 메시지를 던질 수 있기 때문에이 중간 메시지는 도커 클라이언트를 혼동하고 마지막으로 시간 초과됩니다 ...

1.2) 도메인 이름이 구성된 경우 ... DNS를 사용하지 않는 경우 / etc / hosts 파일을 업데이트하는 것을 잊지 마십시오.

1.3) / etc / default / docker에서 회사 외부 허브에서 이미지를 다운로드 할 수 있도록 환경 변수 http_proxy 및 https_proxy ...를 설정합니다. http_proxy = http : // username : password @ proxy : port 형식

2) docker 서비스를 다시 시작하십시오 ... 서비스로 설치된 경우 sudo service docker restart를 사용하십시오.

3) 레지스트리 컨테이너 다시 시작 [sudo docker run -p 5000 : 5000 registry : 2]

4) sudo docker tag imageid IP : port / imagename / tagname ifany를 사용하여 필요한 이미지에 태그 지정

5) 이미지 푸시 ... sudo docker push ip : port / imagename

6) TLS / SSL없이 B라고 다른 컴퓨터에서 이미지를 가져 오려면 B에서 setps 1,1.1 및 2를 적용합니다. 이러한 변경이 컴퓨터 B에서 수행되지 않으면 풀이 실패합니다.


2
--insecure-registry해결 방법이며 수정 사항이 아닙니다.
peterh-Monica 복원


0

Ubuntu 16.04

/etc/systemd/system/docker.service.d/registry.conf컨텐츠가있는 파일 작성 (존재하지 않음) :

[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

그때

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

0

위의 답변 외에도 "docker for mac"에서 작동 한 내용을 추가합니다.

  1. 화면 오른쪽 상단의 Mac 트레이에서 도커 고래 아이콘 을 클릭 합니다.
  2. Preferences-> Daemon을 클릭합니다 .
  3. 안전하지 않은 레지스트리에 IP 및 포트를 추가하십시오.
  4. 데몬을 다시 시작하십시오.

여기에 이미지 설명 입력

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.