개인 도커 레지스트리에 원격 액세스하는 방법은 무엇입니까?
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.2 및 Docker 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
) :
- 레지스트리에서 공개 키 다운로드
/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"에서 작동 한 내용을 추가합니다.
- 화면 오른쪽 상단의 Mac 트레이에서 도커 고래 아이콘 을 클릭 합니다.
- Preferences-> Daemon을 클릭합니다 .
- 안전하지 않은 레지스트리에 IP 및 포트를 추가하십시오.
- 데몬을 다시 시작하십시오.
참고 URL : https://stackoverflow.com/questions/26710153/how-to-get-remote-access-to-a-private-docker-registry
'Programing' 카테고리의 다른 글
복잡한 매개 변수를 [이론]에 전달 (0) | 2020.10.05 |
---|---|
Volley를 사용하여 JSON 데이터로 POST 요청 보내기 (0) | 2020.10.05 |
C 및 C ++에서 (int) + 4 * 5 표현식을 허용하는 이유는 무엇입니까? (0) | 2020.10.05 |
함수 수준 정적 변수는 언제 할당 / 초기화됩니까? (0) | 2020.10.05 |
SQLite-특정 숫자만큼 값 증가 (0) | 2020.10.05 |