简体   繁体   English

Docker私有注册表

[英]Docker private registry

On a virtual server ubuntu 14.04 I have installed docker and I try to push to a local registry an image. 在虚拟服务器ubuntu 14.04上我安装了docker,我尝试将一个映像推送到本地注册表。 I followed this guide on the Docker blog but when I try to push the image I have this output: 在Docker博客上遵循了这个指南但是当我尝试推送图像时,我有这个输出:

Error: Invalid registry endpoint https://xx.xx.xx.xx/v1/ : Get https://xx.xx.xx.xx/v1/_ping : x509: certificate has expired or is not yet valid. 错误:无效的注册表端点https://xx.xx.xx.xx/v1/ :获取https://xx.xx.xx.xx/v1/_ping :x509:证书已过期或尚未生效。 If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add --insecure-registry xx.xx.xx.xx to the daemon's arguments. 如果此私有注册表仅支持具有未知CA证书的HTTP或HTTPS,请将--insecure-registry xx.xx.xx.xx添加到守护程序的参数中。 In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; 对于HTTPS,如果您可以访问注册表的CA证书,则不需要该标志; simply place the CA certificate at /etc/docker/certs.d/xx.xx.xx.xx/ca.crt 只需将CA证书放在/etc/docker/certs.d/xx.xx.xx.xx/ca.crt即可

I try to add --insecure-registry xx.xx.xx.xx in /etc/default/docker file and restart docker service. 我尝试在/etc/default/docker文件中添加--insecure-registry xx.xx.xx.xx并重启docker service。 Docker fails to start with message /proc/self/fd/9: 17: /etc/default/docker: --insecure-registry: not found . Docker无法启动消息/proc/self/fd/9: 17: /etc/default/docker: --insecure-registry: not found

PS: I run my registry in a docker container PS:我在docker容器中运行我的注册表

I had the same problem with Ubuntu 12.04 and Docker 1.4.1. 我遇到了与Ubuntu 12.04和Docker 1.4.1相同的问题。 Here is my solution: 这是我的解决方案:

$ sudo docker push "[host:ip:v6:addr:ess:is:here]:5000/myImage"
FATA[0002] Error: Invalid registry endpoint https://[host:ip:v6:addr:ess:is:here]:5000/v1/: Get https://[host:ip:v6:addr:ess:is:here]:5000/v1/_ping: EOF. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry [host:ip:v6:addr:ess:is:here]: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/[host:ip:v6:addr:ess:is:here]:5000/ca.crt 

So, I have an error. 所以,我有一个错误。

$ ps axwww | grep /usr/bin/docker
14655 ?        Ssl    2:06 /usr/bin/docker -d
14869 pts/0    S+     0:00 grep /usr/bin/docker

Notice, that there is no extra arguments to /usr/bin/docker. 请注意,/ usr / bin / docker没有额外的参数。

$ echo 'DOCKER_OPTS="--insecure-registry [host:ip:v6:addr:ess:is:here]:5000"' | sudo tee -a /etc/default/docker
DOCKER_OPTS="--insecure-registry [host:ip:v6:addr:ess:is:here]:5000"
$ sudo service docker restart
docker stop/waiting
docker start/running, process 15615

Let's check if arguments appeared: 让我们检查参数是否出现:

$ ps axwww | grep /usr/bin/docker
15615 ?        Ssl    0:00 /usr/bin/docker -d --insecure-registry [host:ip:v6:addr:ess:is:here]:5000
15663 pts/0    S+     0:00 grep /usr/bin/docker

Yes, they do. 是的,他们这样做。 One more attempt: 还有一次尝试:

$ sudo docker push "[host:ip:v6:addr:ess:is:here]:5000/myImage"
The push refers to a repository [[host:ip:v6:addr:ess:is:here]:5000/myImage] (len: 1)
Sending image list
Pushing repository [host:ip:v6:addr:ess:is:here]:5000/myImage (1 tags)
511136ea3c5a: Image successfully pushed 
27d47432a69b: Pushing [================================================>  ] 189.8 MB/197.2 MB 0

simply running this docker run -p 5000:5000 -d registry will get you in to trouble with https. 只需运行此docker run -p 5000:5000 -d registry就会让你遇到麻烦。

I found this tutorial helpful : How To Set Up a Private Docker Registry on Ubuntu 14.04 我发现本教程很有帮助: 如何在Ubuntu 14.04上设置私有Docker注册表

It basically sets up a reverse proxy with nginx to access the private registry. 它基本上设置了一个使用nginx的反向代理来访问私有注册表。 I have 1 vagrant box with the registry and a different vagrant box pulling stuff from this registry. 我有1个带有注册表的流浪盒和一个不同的流浪盒从这个注册表中提取东西。 It works :) 有用 :)

Hope that helps 希望有所帮助

Setting up the docker registry directly on a host is quite frustrating. 直接在主机上设置docker注册表非常令人沮丧。 The easiest way to setup a local docker repository is to use the docker-registry docker image. 设置本地docker存储库的最简单方法是使用docker-registry docker镜像。 Simply execute 简单地执行

docker run -p 5000:5000 -d registry

and docker should download the official docker registry image. 和docker应该下载官方docker注册表图像。 After that you can attach to container and customize the setup. 之后,您可以附加到容器并自定义设置。 Source: http://www.devops-insight.com/2014/12/using-private-docker-repository-registry.html 资料来源: http//www.devops-insight.com/2014/12/using-private-docker-repository-registry.html

In the host 在主持人

  1- install docker machin
      curl -L https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine && \
      sudo install /tmp/docker-machine /usr/local/bin/docker-machine
  2- Remove any proxy entry in /etc/systemd/system/docker.....
  3- Edit the daemon.json file, whose default location is /etc/docker/daemon.json
      {
      "insecure-registries" : ["myregistrydomain.com:5000"]
      }
  4- Generate crt: 
      $mkdir -p certs
      $openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt
      Be sure to use the same name myregistrydomain.com as a CN.
      Copy the domain.crt file to /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt on every Docker host. You do not need to restart Docker.

  5- pull registry image from docker hub 
      docker run -p 5000:5000 --name myregistry registry

In the client 在客户端

  1- Remove any proxy entry in /etc/systemd/system/docker.....
  2- Edit the daemon.json file, whose default location is /etc/docker/daemon.json
      {
      "insecure-registries" : ["myregistrydomain.com:5000"]
      }     

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM