Làm cách nào để có quyền truy cập từ xa vào một docker-registry riêng tư?


82

Tôi đang cố gắng thiết lập sổ đăng ký docker riêng bằng hình ảnh được lấy từ: https://github.com/docker/docker-registry

Chỉ bằng cách chạy:
docker run -p 5000:5000 registry

Tôi chỉ có thể kéo / đẩy từ / đến kho lưu trữ này từ localhost, nhưng nếu tôi cố gắng truy cập nó từ một máy khác (sử dụng địa chỉ riêng trên cùng một mạng LAN) thì nó không thành công với thông báo lỗi:

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

Điều khiến tôi phát điên là tôi có thể truy cập nó thành công bằng cách sử dụng: curl 10.0.0.26:5000 và / hoặccurl 10.0.0.26:5000/v1/search

Tôi cũng không hiểu mình nên vượt --insecure-registrycờ ở đâu và như thế nào .


3
nhiều các câu trả lời dường như thể đã lỗi thời cho Docker 1.12 nhưng thấy vikas027 câu trả lời đó là rất tốt cho Docker 1.12 (ATOW mới nhất)
danday74

1
Trên Ubuntu, tài liệu Dockercâu trả lời này hoạt động tốt đối với tôi.
Batandwa

Câu trả lời:


73

OK - Tôi đã tìm ra giải pháp cho điều này - sau một ngày đào bới.

Đối với docker dưới 1.12.1:

Nó chỉ ra rằng phiên bản máy khách mới từ chối hoạt động với sổ đăng ký riêng không có SSL.

Để khắc phục điều này - daemon trên máy khách phải được khởi chạy với cờ không an toàn:

Chỉ loại:

sudo service docker stop # to stop the service

và sau đó

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

(thay thế 10.0.0.26bằng địa chỉ ip của riêng bạn).

Tôi mong đợi những người làm nghề docker sẽ thêm tùy chọn này vào dòng lệnh pull / push ...

Chỉnh sửa - thay đổi - bạn có thể thêm cờ vào DOCKER_OPTSbiến env bên trong / etc / default / docker ... và sau đósudo service docker restart

Chỉnh sửa một lần nữa - Có vẻ như những người chơi docker đang ở đó - và bản sửa lỗi sẽ sớm có: https://github.com/docker/docker/pull/8935

Đối với docker 1.12.1:

Mời các bạn theo dõi bên dưới câu trả lời của vikas027 (hợp lệ cho centos)


Tôi đã có thể sao chép các bước của bạn và được đẩy vào sổ đăng ký riêng tư trên máy chủ từ xa. Nó cũng cho thấy sự thúc đẩy thành công. Tuy nhiên, làm cách nào để liệt kê hình ảnh trên sổ đăng ký riêng tư? Tôi đã thử docker -H tcp://remote-host-ip:5000 imagesnhưng bị lỗi.
Howard Lee

Tôi có thể xác minh rằng điều này xảy ra. Nó cũng xảy ra khi bạn quey <ip>: 5000 / v1 / search - bạn nhận được phản hồi trống. Có lẽ một lỗi khác nhau mà họ có :-(
Ofer Eliassaf

Cập nhật: Tôi đã có thể tìm kiếm / kéo hình ảnh được lưu trữ trên sổ đăng ký riêng tư từ xa. docker search remote-host-ip:5000/image-namedocker pull remote-host-ip:5000/image-namecả hai hoạt động tốt. Bây giờ, làm thế nào để tôi nhận được nó vào danh sách các hình ảnh ...
Howard Lee

3
@ashleyaitken, tôi đã sử dụng tài liệu tham khảo sau để giúp tôi giải quyết bằng Boot2Docker: github.com/boot2docker/boot2docker#insecure-registry . Hy vọng rằng sẽ giúp.
Patelify

1
--insecure-registrylà một giải pháp thay thế và không phải là một sửa chữa.
peterh - Phục hồi Monica

28

Đây là những gì đã làm việc cho tôi trên CentOS 7.2Docker 1.12.1 (mới nhất hiện tại). Sổ đăng ký riêng v2 của tôi đang chạy 192.168.1.88:5000, hãy thay đổi nó cho phù hợp. Điều này cũng hoạt động nếu bạn có nhiều đăng ký, chỉ cần tiếp tục thêm--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
Giải pháp này là giải pháp duy nhất phù hợp với tôi trên Ubuntu.
JARC

1
Cảm ơn người đàn ông - đã làm việc tuyệt vời - thêm một câu trả lời đầy đủ hơn dựa trên điều này cho những người đằng sau một proxy công ty
danday74

2
Làm việc cho tôi nhưng docker.service đã ở /lib/systemd/system/docker.servicetrên Ubuntu 16.04.
Karim Tabet 18/10/16

4
--insecure-registrylà một giải pháp thay thế và không phải là một sửa chữa.
peterh - Phục hồi Monica

1
công việc. Hoặc bạn phải hack toàn bộ hệ thống của mình (một "tính năng" tương tự khác là "mạng cầu nối" có nghĩa là mạng NAT thực sự trong docker, trong khi mạng cầu nối thực đơn giản là không tồn tại). Những câu trả lời này phổ biến các cách giải quyết tồi tệ cho các vấn đề lớn, có thể dễ dàng sửa chữa nhưng bằng cách nào đó chúng lại không. Đây là lý do, tại sao tôi từ chối tất cả chúng - tất cả chúng đều là những giải pháp tồi .
peterh - Phục hồi Monica

24

Chỉnh sửa tệp cấu hình "/ etc / default / docker"

sudo vi / etc / default / docker

thêm dòng vào cuối tệp

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

(thay thế 192.168.2.170 bằng địa chỉ ip của riêng bạn)

và khởi động lại dịch vụ docker

khởi động lại docker dịch vụ sudo


Cảm ơn! Điều /etc/init.d/dockerđáng ngạc nhiên là chỉ chỉnh sửa bằng phẳng không hoạt động trên Ubuntu 14.04. Nhưng sửa chữa của bạn để /etc/default/dockerlàm.
elimisteve

hệ thống máy chủ của tôi cũng là Ubuntu 14.04
daozhao

1
--insecure-registrylà một giải pháp thay thế và không phải là một sửa chữa.
peterh - Phục hồi Monica

12

Tôi thấy phần sau rất hữu ích vì nó thảo luận về cách bản thân dịch vụ Docker được cấu hình. https://docs.docker.com/articles/systemd/

Cùng với bài viết này về lệnh systemctl https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units

Tôi đã sử dụng chuỗi lệnh sau trong vùng chứa dựa trên Centos 7 với hình ảnh đăng ký thu được bằng "docker pull registry: 2.1.1"

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

Và bên trong override.conf đã thêm phần sau.

[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

Lưu ý rằng đầu tiên, trống, ExecStart = xóa mọi thứ đã có sẵn, vì vậy hãy đảm bảo thêm bất kỳ thứ gì từ câu lệnh /usr/lib/systemd/system/docker.service ExecStart = mà bạn muốn giữ lại.

Nếu bạn không chỉ định tùy chọn -d (daemon), bạn sẽ gặp lỗi "Vui lòng chỉ xác định một -H".

Sau khi thực hiện một loạt lệnh sau, tôi có thể thấy các ghi đè của mình tại chỗ.

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

LƯU Ý: Thông tin được cung cấp bởi các dòng Loaded: và Drop-In: trong thông báo trạng thái, rất hữu ích để kiểm tra những gì đang xảy ra với một daemon docker có sẵn để hoạt động.

LƯU Ý: Ngoài ra, hãy xem tệp Loaded: docker.service cho một EnvironmentFile = để biết thêm manh mối.


2
--insecure-registrylà một giải pháp thay thế và không phải là một sửa chữa.
peterh - Phục hồi Monica

Xin chào @peterh Tôi hiểu rằng đó là một cách giải quyết và một cách không an toàn. Tôi không nghi ngờ gì về việc có hệ thống Sản xuất đang sử dụng nó, đó là một điều rất tồi tệ.
TJA

1
@peterh bạn có thể vui lòng chỉ cho tôi bất kỳ liên kết nào hướng dẫn cách làm đúng không và tôi sẽ cập nhật câu trả lời của mình và tham khảo liên kết.
TJA

11

Đồng ý. Đây là cách tôi làm cho nó hoạt động. Nếu bạn thấy lỗi này trong docker 1.3.2 trở lên, hãy làm điều này

đi đến /etc/sysconfig/docker

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

và chạy

sudo service docker restart


1
bạn phải đặt dấu '=' làm ảnh hưởng đến giá trị registry dưới ubuntu: "- insecure-registry = 10.0.0.26: 5000"
Romain Jouin

@Jay tôi là một noob. 1.3.2 nghe giống như một phiên bản tương lai của docker. Tôi thấy phiên bản hiện tại là 1.12 github.com/docker/docker/releases nếu tôi không nhầm ở đây.
ravindrab

1
@ravindrab trong vũ trụ nào 12 nhỏ hơn 3? ;)
ferrari2k

2
--insecure-registrylà một giải pháp thay thế và không phải là một sửa chữa.
peterh - Phục hồi Monica

9

sử dụng lệnh sau để thay thế {YOUR_REGISTRY} bằng sổ đăng ký của bạn

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

boot2dockerlà một bộ công cụ độc lập không liên quan đến ngữ cảnh câu hỏi.
Arnaud Meuret

2
--insecure-registrylà một giải pháp thay thế và không phải là một sửa chữa.
peterh - Phục hồi Monica

7

chỉnh sửa tệp docker.service, thêm cờ --insecure-registry xxxx sau -d, khởi động lại docker

đây là điều duy nhất phù hợp với tôi, DOCKER_OPTS không có bất kỳ tác dụng nào


tất cả mọi thứ bạn nói là đúng nhưng các chi tiết rất ít mà câu trả lời là gần như vô dụng
danday74

2
--insecure-registrylà một giải pháp thay thế và không phải là một sửa chữa.
peterh - Phục hồi Monica

4

Docker 1.12.1

Đối với CentOS 7.2

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

Đối với ubuntu 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

Có vẻ như tùy chọn --insecure-registry có thể được sử dụng cả khi có và không có dấu "=" giữa nó và ID đăng ký.


2
--insecure-registrylà một giải pháp thay thế và không phải là một sửa chữa.
peterh - Phục hồi Monica

2

Tôi thấy rằng phiên bản ứng dụng khách docker và phiên bản docker đăng ký phải khớp với nhau, nếu không bạn sẽ gặp sự cố kết nối, mặc dù đã có mọi thứ.


2

Giải pháp hai bước (không có --insecure-registry):

  1. Tải xuống khóa công khai từ sổ đăng ký của bạn
  2. Đặt nó vào /etc/docker/certs.d/$HOSTNAME/thư mục

 

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

Bây giờ docker của bạn sẽ tin tưởng vào chứng chỉ tự ký của bạn.


1

Điều này dựa trên câu trả lời từ vikas027 trên Centos 7 và Docker 1.12

Vì tôi đứng sau proxy nên giải pháp đầy đủ của tôi là ...

/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

và đừng quên khởi động lại :)

sudo systemctl daemon-reload; sudo systemctl restart docker;

1
--insecure-registrylà một giải pháp thay thế và không phải là một sửa chữa.
peterh - Phục hồi Monica

0

Đặt sổ đăng ký không an toàn cục bộ trong docker cùng với proxy:

1) trong ubuntu, hãy thêm cờ sau --insecure-registry IP: port dưới DOCKER_OPTS trong tệp / etc / default / docker

1.1) cấu hình biến env no_proxy để bỏ qua IP cục bộ / tên máy / tên miền ... vì proxy có thể ném một tin nhắn tương tác ... như tiếp tục và tin nhắn trung gian này gây nhầm lẫn cho máy khách docker và cuối cùng là hết thời gian ...

1.2) nếu tên miền được cấu hình ... thì đừng quên cập nhật tệp / etc / hosts nếu không sử dụng DNS.

1.3) trong / etc / default / docker đặt các biến env http_proxy và https_proxy ... vì nó cho phép tải xuống hình ảnh từ các trung tâm công ty bên ngoài. định dạng http_proxy = http: // tên người dùng: mật khẩu @ proxy: cổng

2) khởi động lại dịch vụ docker ... nếu được cài đặt là dịch vụ, hãy sử dụng dịch vụ sudo khởi động lại docker

3) khởi động lại vùng chứa đăng ký [sudo docker run -p 5000: 5000 registry: 2]

4) gắn thẻ cho hình ảnh được yêu cầu bằng cách sử dụng thẻ sudo docker IP imageid: port / imagename / tagname ifany

5) đẩy hình ảnh ... sudo docker push ip: port / imagename

6) Nếu bạn muốn kéo hình ảnh từ một máy khác, nói B không có TLS / SSL, thì trong B áp dụng setps 1,1.1 và 2. Nếu những thay đổi này không được thực hiện trong máy B ... pull sẽ không thành công.


2
--insecure-registrylà một giải pháp thay thế và không phải là một sửa chữa.
peterh - Phục hồi Monica


0

Ubuntu 16.04

Tạo (không tồn tại) tệp /etc/systemd/system/docker.service.d/registry.confcó nội dung:

[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

sau đó

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

0

Ngoài các câu trả lời ở trên, tôi đang thêm những gì hoạt động trong "docker dành cho mac" cho tôi:

  1. Nhấp vào biểu tượng cá voi docker từ khay mac ở góc trên cùng bên phải của màn hình.
  2. Nhấp vào Tùy chọn -> Daemon .
  3. Thêm IP và cổng của bạn vào sổ đăng ký không an toàn.
  4. Khởi động lại Daemon.

nhập mô tả hình ảnh ở đây

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.