기본 Docker 레지스트리를 docker.io에서 개인 레지스트리로 변경하는 방법은 무엇입니까?


124

기본적으로 다음 명령을 실행하면 :

sudo docker pull ruby:2.2.1

기본적으로 docker.io 공식 사이트에서 가져옵니다.

Pulling repository docker.io/library/ruby

내 개인 레지스트리로 어떻게 변경합니까? 즉, 내가 발행하면

sudo docker pull ruby:2.2.1

내 개인 레지스트리에서 가져 오며 출력은 다음과 같습니다.

Pulling repository my_private.registry:port/library/ruby

작동하는 방법을 찾을 수 있었습니까? 나는 똑같은 것을 찾고 있었다. nexus를 Docker 개인 레지스트리로 사용하고 있습니다. Docker pull 명령에서 도메인 이름과 포트 번호를 사용하고 싶지 않습니다.
Dinesh

답변:


56

업데이트 : 귀하의 의견에 따라 현재 기본 레지스트리를 변경할 수 없습니다 . 자세한 내용은 이 문제 를 참조하십시오.

호스트와 포트를 자신의 것으로 대체하여이를 수행 할 수 있어야합니다.

docker pull localhost:5000/registry-demo

서버가 원격이거나 인증이있는 경우 다음을 사용하여 서버에 로그인해야 할 수 있습니다.

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

그런 다음 실행 :

docker pull <YOUR-DOMAIN>:8080/test-image

14
docker pull <YOUR-DOMAIN>:8080/test-image괜찮 았어. 그러나 내가 원하는 것은 docker pull test-imageDOMAIN 및 Port를 지정하지 않고 로그인하지 않는 것입니다.
mainframer

2
귀하의 의견을 바탕으로 답변을 업데이트했습니다. 현재 기본 레지스트리를 설정할 수 없습니다.
Guy

대부분의 이미지가 의존하는 기본 네임 스페이스를 깨기 때문에 다른 기본 레지스트리를 설정하는 것도 가능하지 않을 것입니다
Matt

@scopesnpm에서 와 같은 작업을 수행 하여 기존 네임 스페이스와 충돌하지 않고 새 네임 스페이스를 도입 할 수 있습니다. 이미지 이름에 레지스트리 호스트 이름이 포함되어 있으면 회사 또는 프로젝트 내에서 레지스트리 캐싱 / 프록시 / 잠금이 어려워집니다. 이것은 잘 설명합니다 : informit.com/articles/article.aspx?p=2464012&seqNum=3
Alexander Klimetschek

이 PR은 해당 주제에 대한 가장 최근의 토론 인 것 같습니다. github.com/moby/moby/pull/34319
Alexander Klimetschek

21

이것이 실제로 가능하지만 정품 Docker CE 또는 EE 버전을 사용하지 않는 것으로 나타났습니다 .

'--add-registry'플래그와 함께 Red Hat의 docker 포크를 사용하거나 자신의 하드 코딩 된 기본 레지스트리 네임 스페이스 / 인덱스를 사용하도록 수정 된 registry / config.go를 사용하여 소스에서 Docker를 직접 빌드 할 수 있습니다.


3
RedHat의 포크는 centos-extras에서 사용할 수있는 것입니다. docker.io 버전으로 전환 한 후 --add-registry작동이 중지 된 이유를 이해하도록 도와 주셔서 감사합니다 .
chutz

2
--block-registry index.docker.io옵션을 사용 하여 기본 레지스트리를 제거 할 수도 있습니다 .
Evan

1
--add-registry 풀 요청 했다 병합되지 않습니다 . 이 기능은 궁극적으로 거부되었습니다 ( # 11816 ).
Franklin Piat

9

fedora distro를 사용하는 경우 파일을 변경할 수 있습니다.

/etc/containers/registries.conf

도메인 docker.io 추가


이 redhat 특정 구성 파일은 --add-registry. 풀 리퀘스트병합되지 않았을 때 Docker는이 기능을 채택 하지 않습니다 . (또한 기능이 궁극적으로 거부되었습니다 ( # 11816 ).
Franklin Piat

6

커뮤니티 내에서 생성되는 조각화로 인해 지원되지 않는 것 같습니다 (즉, 두 명의 사용자가 다른 이미지를 가져옴 ubuntu:latest). 이미지 이름 앞에 호스트를 추가하기 만하면됩니다. 토론에 참여하려면 이 github 문제 를 참조하십시오 .

(참고로, 이것은 의견이있는 의견이 아니라 언급 된 github 문제에서 따를 수있는 토론의 매우 짧은 요약 일뿐입니다.)


10
단편화 네,하지만 리눅스 초창기에는 결국 3 개 (소스베이스 [arch, gentoo, slax, ...], 데비안 기반 [debian / ubuntu], redhat 기반 [enterprise linux, rhel, centos])가되었습니다. 보안 관점에서 보면 기본 업스트림 레지스트리를 자체 관리되는 것으로 변경할 수있는 것이 더 나을 것입니다
Dwight Spencer

2
말하는 "단지 세 linuxes, 레드햇, 데비안, 소스가있는 것은"말처럼 "이 세 개의 검색 공급자입니다, 구글 빙, 그리고 다른 모든 검색 공급자"...
크리스 브라운

4

/etc/docker/daemon.json에 다음 옵션을 추가하려고했습니다. (CentOS7을 사용했습니다)

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

그 후 docker 데몬을 다시 시작했습니다. 그리고 docker.io 없이도 작동합니다. 이 사람이 도움이 되길 바랍니다.


이 구성은 RedHat에 고유합니다. --add-registry 풀 요청 했다 병합되지 않습니다 .
Franklin Piat

2

Docker 공식 입장은 문제 # 11815에 설명되어 있습니다 .

문제 11815 : pull 명령에 사용되는 기본 레지스트리 지정 허용

해결:

앞서 지적한 것처럼 (# 11815), 이것은 네임 스페이스를 조각화 하고 커뮤니티를 상당히 손상시켜 도커 파일을 더 이상 이식 할 수 없게 만듭니다.

[관리자]는 이러한 이유로 이것을 닫을 것입니다.

Red Hat에는이를 허용하는 특정 구현이있었습니다 (anwser 참조, 그러나 Docker 업스트림 프로젝트 에서 거부 됨). RHEL / CentOS 7에 --add-registry설정된 인수에 의존했습니다 /etc/containers/registries.conf.


1

이전 에는 Ubuntu 14:04에서 작동 하고 Ubuntu 15:04에서 몇 가지 문제DOCKER_OPTS있는 /etc/default/docker구성 파일을 사용하여이 작업을 수행 할 수 있었습니다 . 이 문제가 해결되었는지 확실하지 않습니다.

아래 줄 /etc/default/docker은 docker 데몬을 실행하는 호스트 의 파일로 이동해야합니다 . 개인 레지스트리에 대한 변경 사항은 로컬 네트워크에 설치됩니다. 참고 :이 변경 사항과 함께 docker 서비스를 다시 시작해야합니다.

DOCKER_OPTS="--insecure-registry <priv registry hostname/ip>:<port>"

11
'--insecure-registry'플래그를 사용하면 docker가 TLS 인증없이 명명 된 레지스트리에서 가져올 수 있습니다. 기본 레지스트리가 지정되지 않은 경우 기본 레지스트리를 설정하는 데 아무 작업도 수행하지 않습니다.
Josiah

0

나는 오늘 (곧 2020) 여전히 유효한 Guy의 원래 답변에 합산하고 있습니다.

에서와 같이 기본 도커 레지스트리를 재정의하는 maven것은 실제로 좋은 방법이 아닙니다.

를 사용할 때 maven프록시 역할을 할 로컬 저장소 관리 시스템을 통해 Maven Central Repository에서 아티팩트를 가져옵니다. 이러한 아티팩트는 일반 원시 라이브러리 (jar)이며 동일한 이름으로 jar를 푸시 할 가능성이 거의 없습니다.

반면에 도커 이미지는 완전히 작동하고 실행 가능하며 환경이 완벽하며 Docker 허브에서 이미지를 가져 와서 수정 한 다음이 이미지를 동일한 이름으로 로컬 레지스트리 관리 시스템에 푸시하는 것이 총체적입니다. 그 이름이 말하는 그대로 기업의 맥락에서. 이 경우 두 이미지의 유일한 차이점은 정확히 경로입니다 !!

따라서 다음 규칙을 설정해야합니다. 이미지의 접두사는 출처를 나타냅니다. 기본적으로 이미지에 접두사가없는 경우 Docker Hub에서 가져옵니다.


정확히 이러한 이유로 Maven 저장소 저장 릴리스는 기본적으로 덮어 쓰기를 허용하지 않으며 분류자를 제공합니다. 마찬가지로 docker는 태그를 사용합니다.
coz

-5

시도하지 않았지만 /etc/hostsfor hub.docker.com또는 유사한 항목 ( docker.io?) 을 추가하여 DNS 확인 프로세스를 가로채는 것이 작동 할 수 있습니까?


4
그것은 연결 단계에서 폭발 할 것입니다. 연결하는 서버에는 도메인에 대한 적절한 TLS 인증서가 없습니다.
Michael Mol
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.