Programing

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

lottogame 2020. 10. 5. 07:28
반응형

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


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깃발을 통과해야하는지 이해하지 못한다 .


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에 유효)


이것이 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

구성 파일 "/ 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 서비스 도커 재시작


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

이동 /etc/sysconfig/docker

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

그리고 실행

sudo service docker restart


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 =을 확인하십시오.


다음 명령을 사용하여 {YOUR_REGISTRY}를 레지스트리로 바꾸십시오.

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

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

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


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와 "="를 포함하거나 포함하지 않고 모두 사용할 수 있습니다.


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


이것은 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;

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는 자체 서명 된 인증서를 신뢰합니다.


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

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

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

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에서 수행되지 않으면 풀이 실패합니다.


번거 로움을 덜기 위해 gitlab에서 제공하는 무료 개인 도커 레지스트리 서비스를 사용하는 것이 어떻습니까?

https://about.gitlab.com/2016/05/23/gitlab-container-registry/

그들의 레지스트리는 안전하므로 문제가 없습니다.


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

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

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

여기에 이미지 설명 입력

참고 URL : https://stackoverflow.com/questions/26710153/how-to-get-remote-access-to-a-private-docker-registry

반응형