Làm cách nào để thay đổi sổ đăng ký docker mặc định từ docker.io thành sổ đăng ký riêng của tôi?


124

Theo mặc định, nếu tôi ra lệnh:

sudo docker pull ruby:2.2.1

nó sẽ kéo từ trang docker.io offical theo mặc định.

Pulling repository docker.io/library/ruby

Làm cách nào để thay đổi nó thành sổ đăng ký riêng tư của tôi. Điều đó có nghĩa là nếu tôi phát hành

sudo docker pull ruby:2.2.1

nó sẽ kéo từ sổ đăng ký riêng của tôi, kết quả là:

Pulling repository my_private.registry:port/library/ruby

Bạn có thể tìm ra cách làm cho nó hoạt động không? Tôi đã tìm kiếm chính xác điều tương tự. Tôi đang sử dụng nexus làm sổ đăng ký riêng cho docker của mình. Tôi không muốn sử dụng tên miền và số cổng trong lệnh kéo docker của mình.
Dinesh

Câu trả lời:


56

CẬP NHẬT: Theo nhận xét của bạn, hiện không thể thay đổi sổ đăng ký mặc định, hãy xem vấn đề này để biết thêm thông tin.

Bạn sẽ có thể làm điều này, thay thế máy chủ và cổng của riêng bạn:

docker pull localhost:5000/registry-demo

Nếu máy chủ ở xa / có xác thực, bạn có thể cần đăng nhập vào máy chủ bằng:

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

Sau đó chạy:

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

14
docker pull <YOUR-DOMAIN>:8080/test-imageđã ổn. Nhưng những gì tôi muốn là docker pull test-image, whichi là không phân biệt DOMAIN và Cổng và không cần đăng nhập.
mainframer

2
Tôi đã cập nhật câu trả lời của mình dựa trên nhận xét của bạn. Hiện không thể đặt sổ đăng ký mặc định
Guy

Đó là không có khả năng bao giờ trở thành có thể thiết lập một registry mặc định khác nhau trong hai, do đó phá vỡ không gian tên mặc định rằng hầu hết các hình ảnh dựa vào
Matt

Họ có thể làm điều gì đó như @scopestrong npm để giới thiệu không gian tên mới mà không xung đột với không gian tên hiện có. Có tên máy chủ đăng ký bao gồm trong tên hình ảnh làm cho việc lưu trữ / ủy quyền / khóa sổ đăng ký bên trong một công ty hoặc dự án trở nên khó khăn. Này mô tả nó cũng: informit.com/articles/article.aspx?p=2464012&seqNum=3
Alexander Klimetschek

PR này có vẻ là các cuộc thảo luận gần đây nhất của chủ đề đó: github.com/moby/moby/pull/34319
Alexander Klimetschek

21

Hóa ra đây thực sự tốt, nhưng không sử dụng Docker CE hoặc EE phiên bản chính hãng.

Bạn có thể sử dụng bộ docker fork của Red Hat với cờ '--add-registry' hoặc bạn có thể tự tạo docker từ nguồn với registry / config.go được sửa đổi để sử dụng không gian tên / chỉ mục đăng ký mặc định được mã hóa cứng của riêng bạn.


3
RedHat's fork là một cái có sẵn trong centos-extras. Cảm ơn bạn đã giúp tôi hiểu lý do tại sao sau khi chuyển sang phiên bản docker.io --add-registrylại ngừng hoạt động.
chutz

2
Bạn cũng có thể sử dụng --block-registry index.docker.iotùy chọn để loại bỏ sổ đăng ký mặc định.
Evan

1
Các --add-registry yêu cầu kéo được không sáp nhập . Tính năng này cuối cùng đã bị từ chối ( # 11816 ).
Franklin Piat

9

nếu bạn đang sử dụng bản phân phối fedora, bạn có thể thay đổi tệp

/etc/containers/registries.conf

Thêm miền docker.io


Tệp cấu hình cụ thể redhat này được sử dụng để khởi động dockerd với --add-registry. Tính năng này sẽ không được Docker chấp nhận trong yêu cầu kéo không được hợp nhất . (cũng là tính năng cuối cùng đã bị từ chối ( # 11816 ).
Franklin Piat

6

Có vẻ như nó sẽ không được hỗ trợ do sự phân mảnh mà nó sẽ tạo ra trong cộng đồng (tức là hai người dùng sẽ nhận được các hình ảnh khác nhau kéo ubuntu:latest). Bạn chỉ cần thêm máy chủ lưu trữ vào trước tên hình ảnh. Xem vấn đề github này để tham gia thảo luận.

(Lưu ý, đây không phải là một bình luận cố ý, chỉ là một bản tóm tắt rất ngắn của cuộc thảo luận có thể được theo sau trong vấn đề github đã đề cập.)


10
sự phân mảnh có nhưng chỉ với những ngày đầu tiên của linux thì cuối cùng chỉ có ba (cơ sở nguồn [Arch, gentoo, slax, ...], dựa trên debian [debian / ubuntu] và dựa trên redhat [Enterprise linux, rhel, centos]. sẽ tốt hơn từ một quan điểm bảo mật để có thể thay đổi mặc định registry thượng nguồn đến một cái gì đó tự quản lý.
Dwight Spencer

2
Nói "chỉ có ba linuxes, redhat, debian, và nguồn" cũng giống như nói rằng "chỉ có ba nhà cung cấp tìm kiếm: Google, Bing, và tất cả các nhà cung cấp tìm kiếm khác" ...
Chris Browne

4

Tôi đã cố gắng thêm các tùy chọn sau vào /etc/docker/daemon.json. (Tôi đã sử dụng CentOS7)

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

sau đó, khởi động lại trình nền docker. Và nó hoạt động mà không cần docker.io. Tôi hy vọng điều này ai đó sẽ hữu ích.


Cấu hình này dành riêng cho RedHat. Các --add-registry yêu cầu kéo được không sáp nhập .
Franklin Piat

2

Vị trí chính thức của Docker được giải thích trong vấn đề # 11815 :

Sự cố 11815: Cho phép chỉ định các đăng ký mặc định được sử dụng trong lệnh pull

Độ phân giải:

Giống như đã chỉ ra trước đó (# 11815), điều này sẽ phân mảnh không gian tên và gây tổn hại cho cộng đồng khá nặng, khiến các tệp dockerfiles không còn di động nữa.

[Người bảo trì] sẽ đóng nó vì lý do này.

Red Hat đã có một triển khai cụ thể cho phép nó (xem anwser, nhưng nó đã bị Docker ngược dòng projet từ chối ). Nó dựa trên --add-registryđối số, được thiết lập /etc/containers/registries.conftrên RHEL / CentOS 7.


1

Đầu này có thể đạt được sử dụng DOCKER_OPTStrong /etc/default/dockertập tin cấu hình mà làm việc trên Ubuntu 14:04 và đã có một số vấn đề trên Ubuntu 15:04. Không chắc chắn nếu điều này đã được sửa chữa.

Dòng dưới đây cần đi vào tệp /etc/default/dockertrên máy chủ chạy trình nền docker. Điểm thay đổi đối với sổ đăng ký riêng được cài đặt trong mạng cục bộ của bạn. Lưu ý: bạn sẽ yêu cầu khởi động lại dịch vụ docker sau khi thay đổi này.

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

11
Cờ '--insecure-registry' cho phép docker kéo từ sổ đăng ký được đặt tên mà không cần xác thực TLS. Nó không có tác dụng gì đối với việc thiết lập sổ đăng ký mặc định khi một sổ đăng ký không được chỉ định.
Josiah

0

Tôi đang bổ sung vào câu trả lời ban đầu do Guy đưa ra, câu trả lời này vẫn còn hiệu lực cho đến ngày nay (sớm hơn năm 2020).

Ghi đè sổ đăng ký docker mặc định, giống như bạn sẽ làm maven, thực sự không phải là một phương pháp hay.

Khi sử dụng maven, bạn kéo các tạo tác từ Kho lưu trữ Trung tâm Maven thông qua hệ thống quản lý kho lưu trữ cục bộ của bạn, hệ thống này sẽ hoạt động như một proxy. Những đồ tạo tác này là những chiếc lọ (lọ) đơn giản, thô sơ và rất khó xảy ra trường hợp bạn đẩy những chiếc lọ có cùng tên.

Mặt khác, hình ảnh docker hoàn toàn hoạt động, có thể chạy được, môi trường và nó rất hợp lý để kéo hình ảnh từ Docker Hub, sửa đổi nó và đẩy hình ảnh này vào hệ thống quản lý đăng ký cục bộ của bạn với cùng tên, vì nó chính xác tên của nó nói lên nó là gì, chỉ trong bối cảnh doanh nghiệp của bạn. Trong trường hợp này, điểm khác biệt duy nhất giữa hai hình ảnh chính xác là đường dẫn của nó !!

Do đó cần phải thiết lập quy tắc sau: tiền tố của một hình ảnh cho biết nguồn gốc của nó; theo mặc định, nếu một hình ảnh không có tiền tố, nó sẽ được lấy từ Docker Hub.


Vì lý do chính xác này, kho lưu trữ maven lưu trữ các bản phát hành theo mặc định không cho phép ghi đè và cung cấp bộ phân loại. Tương tự docker sử dụng thẻ.
coz

-5

Chưa thử, nhưng có thể chiếm quyền điều khiển quá trình phân giải DNS bằng cách thêm một dòng vào /etc/hostscho hub.docker.comhoặc một cái gì đó tương tự ( docker.io?) Có thể hoạt động?


4
Điều đó sẽ nổ tung trong giai đoạn kết nối; máy chủ bạn kết nối sẽ không có chứng chỉ TLS thích hợp cho miền.
Michael Mol
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.