簡體   English   中英

如何遠程訪問私有docker-registry?

[英]How to get remote access to a private docker-registry?

我正在嘗試使用以下圖像設置私有docker注冊表: https//github.com/docker/docker-registry

只需運行:
docker run -p 5000:5000 registry

我只能從localhost拉/從這個存儲庫推送/但是如果我嘗試從另一台機器(使用同一局域網上的私有地址)訪問它,它會失敗並顯示錯誤消息:

*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標志。

好的 - 經過一天的挖掘后,我找到了解決方案。

對於1.12.1以下的碼頭:

事實證明,新的客戶端版本拒絕使用沒有SSL的私有注冊表。

要解決此問題 - 應使用不安全標志啟動客戶端計算機上的守護程序:

只需輸入:

sudo service docker stop # to stop the service

然后

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

(用您自己的IP地址替換10.0.0.26 )。

我希望docker的人能把這個選項添加到pull / push命令行......

編輯 - altenantively - 您可以將標志添加到/ etc / default / DOCKER_OPTS env變量...然后sudo service docker restart

再次編輯 - 看起來這個碼頭工人正在使用它 - 很快就會出現修復: 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”

(用您自己的IP地址替換192.168.2.170)

並重新啟動docker服務

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

我在基於Centos 7的容器中使用了以下一系列命令,其中注冊表圖像由“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

在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(守護程序)選項,則會出現“請僅指定一個-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

對於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

似乎--insecure-registry選項可以在它和注冊表ID之間使用和不使用“=”。

我發現docker客戶端版本和注冊表docker版本必須匹配,否則你會遇到連接問題,盡管已經有了一切。

這是基於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;

兩步解決方案(沒有--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)在ubuntu中添加以下標志--insecure-registry IP:文件/ etc / default / docker中DOCKER_OPTS下的端口

1.1)配置no_proxy env變量以繞過本地IP /主機名/域名...因為代理可以拋出交互式消息...就像繼續這個中間消息混淆docker客戶端並最終超時...

1.2)如果配置了域名...那么如果不使用DNS,請不要忘記更新/ etc / hosts文件。

1.3)在/ etc / default / docker中設置env變量http_proxy和https_proxy ...因為它可以從公司外部中心下載圖像。 格式為http_proxy = http:// username:password @ proxy:port

2)重啟docker服務...如果安裝為服務,請使用sudo service docker restart

3)重啟注冊表容器[sudo docker run -p 5000:5000注冊表:2]

4)使用sudo docker tag imageid標記所需的圖像IP:port / imagename / tagname ifany

5)推送圖像... sudo docker push ip:port / imagename

6)如果你想從另一台機器拉出圖像說B沒有TLS / SSL,那么在B中應用setps 1,1.1和2.如果這些改變沒有在機器B中完成...拉動將失敗。

為了節省您的麻煩,為什么不使用gitlab提供的免費私有docker注冊服務 - 效果很好

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托盤中的docker whale圖標
  2. 單擊首選項 - >守護程序
  3. 將您的IP和端口添加到不安全的注冊表。
  4. 重啟守護進程。

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM