docker-registry搭建过程中遇到的问题

本文详细介绍了如何使用registry容器启动私有仓库服务,并解决了在宿主机上访问私有仓库时遇到的错误。包括了通过设置代理、添加证书、使用--insecure-registry参数等方法解决访问问题,并提供了针对不同系统的配置方法。对于遇到类似问题的开发者提供了实用的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用registry启动私有仓库的容器

docker run -d -p 5000:5000 -v /root/my_registry:/tmp/registry registry
说明:若之前没有安装registry容器则会自动下载并启动一个registry容器,创建本地的私有仓库服务。默认情况下,会将仓库创建在容器的/tmp/registry目录下,可以通过 -v 参数来将镜像文件存放在本地的指定路径上(例如,放在本地目录/root/my_registry下)。


宿主主机my_registry的目录结构

  1. root@gerryyang:~/my_registry# tree  
  2. .  
  3. ├── images  
  4. │   ├── 3b363fd9d7dab4db9591058a3f43e806f6fa6f7e2744b63b2df4b84eadb0685a  
  5. │   │   ├── ancestry  
  6. │   │   ├── _checksum  
  7. │   │   ├── json  
  8. │   │   └── layer  
  9. │   ├── 511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158  
  10. │   │   ├── ancestry  
  11. │   │   ├── _checksum  
  12. │   │   ├── json  
  13. │   │   └── layer  
  14. │   ├── 607c5d1cca71dd3b6c04327c3903363079b72ab3e5e4289d74fb00a9ac7ec2aa  
  15. │   │   ├── ancestry  
  16. │   │   ├── _checksum  
  17. │   │   ├── json  
  18. │   │   └── layer  
  19. │   ├── 894c0161121f105ac9b81bca7ac583ac1f29772625911db0fa2b6b475f5642fd  
  20. │   │   ├── ancestry  
  21. │   │   ├── _checksum  
  22. │   │   ├── json  
  23. │   │   └── layer  
  24. │   ├── 8eaa4ff06b53ff7730c4d7a7e21b4426a4b46dee064ca2d5d90d757dc7ea040a  
  25. │   │   ├── ancestry  
  26. │   │   ├── _checksum  
  27. │   │   ├── json  
  28. │   │   └── layer  
  29. │   ├── a45787b0222f955d68d9db34fb18033144b8a78015d9e306a1613894da0fd86e  
  30. │   │   ├── ancestry  
  31. │   │   ├── _checksum  
  32. │   │   ├── json  
  33. │   │   └── layer  
  34. │   ├── f0e3262ed6617896b306852c923e4c0e1d359b58b29a02ef849c4b8978c73c65  
  35. │   │   ├── ancestry  
  36. │   │   ├── _checksum  
  37. │   │   ├── json  
  38. │   │   └── layer  
  39. │   └── f62feddc05dc67da9b725361f97d7ae72a32e355ce1585f9a60d090289120f73  
  40. │       ├── ancestry  
  41. │       ├── _checksum  
  42. │       ├── json  
  43. │       └── layer  
  44. └── repositories  
  45.     └── library  
  46.         └── ubuntu_sshd_gcc_gerry  
  47.             ├── _index_images  
  48.             ├── tag_14.04  
  49.             └── tag14.04_json  
  50.   
  51. 12 directories, 35 files  



利用官方提供的registry镜像,将端口映射到主机的5000端口上,然后docker pull 镜像,报错如下:



根据报错提示解决方法:

1.自己添加证书走https

   在registry前面套一层nginx代理,在nginx里自己签一组证书,把ca.crt拷贝到/etc/docker/certs.d/公网IP:5000/ca.crt就可以了,这样做的好处就是,以后有了第二套registry,你也只是把新的registry证书加入到对应的目录即可。


2.加--insecure-registry参数

    在boot2docker中步骤如下:

       .使用 boot2docker ssh 登陆到 boot2docker 虚拟机

       .修改 /var/lib/boot2docker/profile 文件,向该文件中增加一行:EXTRA_ARGS="--insecure-registry 192.168.59.104:5000"

    .退出该虚拟机并使用命令 boot2docker restart 重启 boot2docker

          完成重启之后,将私有仓库服务器运行起来,再进行docker push操作即可。

  

说明一点,如果是内网的话需要从外网私服下载镜像,可以设置代理,方法如下:

vi /var/lib/boot2docker/profile

在新建的profile文件中填入公司代理:

export HTTP_PROXY=http://proxy.host:port 
export HTTPS_PROXY=https://proxy.host:port

保存后重启docker服务:

sudo /etc/init.d/docker restart

或者

 sudo HTTP_PROXY=http://proxy.host:port/ docker -d 

 sudo HTTP_PROXY=http://用户名@密码:10.8.2.1:80/ docker -d

 

centos下: 

编辑/etc/sysconfig/docker

  查找 # INSECURE_REGISTRY='--insecure-registry',增加下面一行:
   INSECURE_REGISTRY='--insecure-registry=公网ip:5000'

     然后重启Dcoker服务即可 。


ubuntu下: 

编辑/etc/default/docker

增加

DOCKER_OPTS="--insecure-registry 0.0.0.0/0"  -------------------代表本机上的私服

    然后重启Dcoker服务即可 。





在registry2版本发布后,出现的问题:

The push refers to a repository [10.8.24.54:5000/ncl_pmo/hello] (len: 1)
unable to ping registry endpoint https://10.8.24.54:5000/v0/
v2 ping attempt failed with error: Get https://10.8.24.54:5000/v2/: EOF
 v1 ping attempt failed with error: Get https://10.8.24.54:5000/v1/_ping: EOF

解决步骤:

1.编辑/etc/sysconfig/docker

    other_args="--insecure-registry 0.0.0.0/0"

2.重启服务,重新测试,错误依旧

3.通过#ps -aux|grep docker查看

   [root@DockerDemo ~]# ps -aux|grep docker
root       3405  0.5  2.3 618760 23344 ?        Ssl  01:23   0:00 /usr/bin/docker daemon -H fd://
root       3593  0.0  0.0 112656   968 pts/0    R+   01:26   0:00 grep --color=auto docker

根据输出可以看出我们更改配置文件并没有生效

4.通过查阅资料发现解决办法如下图:

    



<think>好的,用户想了解如何使用Docker Registry。我需要先理清Docker Registry的基本概念,然后分步骤介绍如何部署和使用。首先,Docker Registry的作用是存储和管理Docker镜像,私有Registry对于内部开发或CI/CD流程很重要。用户可能是开发者或运维人员,他们可能已经对Docker有一定了解,但需要具体的配置步骤。 我应该先解释Docker Registry是什么,以及为什么需要它。然后,按照安装、运行、配置、推送和拉取镜像的顺序来组织内容。需要注意常见问题,比如身份验证和HTTPS配置,这些对于生产环境很重要。另外,用户可能对命令行操作比较熟悉,所以需要给出具体的命令示例,比如docker run和docker push/pull的命令。 需要检查是否有遗漏的步骤,比如持久化存储,默认情况下Registry的数据在容器停止后会丢失,所以应该提到使用volume挂载。安全方面,TLS证书和身份验证也是必须提到的部分,但用户可能只是需要快速入门,所以可能需要区分基本使用和高级配置,先介绍简单的本地运行,再提到生产环境的注意事项。 另外,用户可能遇到的问题,比如如何访问私有Registry,需要在客户端配置daemon.json,或者使用docker login。这部分需要详细说明,避免用户遇到权限问题。示例中的镜像名称和tag需要明确,比如localhost:5000/my-image这样的格式,可能用户会忽略这一点,导致推送失败。 总结下来,结构应该是:简介、快速启动、基本操作、配置认证、HTTPS设置、管理镜像、生产建议。每个部分简明扼要,提供命令示例,同时提醒常见问题。确保用户按照步骤操作后能够成功搭建并使用私有Registry。</think>Docker Registry 是一个用于存储和管理 Docker 镜像的服务。官方提供了 `registry` 镜像,可以快速搭建私有镜像仓库。以下是基本使用方法: --- ### **1. 快速启动本地 Registry** ```bash # 拉取官方 registry 镜像 docker pull registry:2 # 启动一个本地 Registry 容器(数据存储在临时容器中,仅测试用) docker run -d -p 5000:5000 --name my-registry registry:2 ``` - 访问 `http://localhost:5000/v2/_catalog` 可查看仓库中的镜像列表(返回空列表 `{"repositories":[]}` 表示无镜像)。 --- ### **2. 推送镜像到本地 Registry** #### **步骤 1:标记镜像** 镜像名称需符合格式 `<registry-host>:<port>/<image-name>:<tag>`: ```bash # 示例:将本地镜像标记为指向私有 Registry docker tag my-image:latest localhost:5000/my-image:latest ``` #### **步骤 2:推送镜像** ```bash docker push localhost:5000/my-image:latest ``` --- ### **3. 从本地 Registry 拉取镜像** ```bash docker pull localhost:5000/my-image:latest ``` --- ### **4. 持久化存储(生产环境必备)** 使用 Volume 或绑定宿主机目录保存镜像数据: ```bash docker run -d \ -p 5000:5000 \ --name my-registry \ -v /my-registry-data:/var/lib/registry \ registry:2 ``` - `/my-registry-data` 是宿主机目录,用于永久存储镜像。 --- ### **5. 配置认证(增强安全性)** #### **生成用户名密码文件** ```bash # 安装 htpasswd 工具(如未安装) apt-get install apache2-utils # 创建密码文件 mkdir auth htpasswd -Bbn myuser mypassword > auth/htpasswd ``` #### **启动带认证的 Registry** ```bash docker run -d \ -p 5000:5000 \ --name my-secure-registry \ -v /my-registry-data:/var/lib/registry \ -v $(pwd)/auth:/auth \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \ registry:2 ``` #### **登录私有 Registry** ```bash docker login localhost:5000 -u myuser -p mypassword ``` --- ### **6. 配置 HTTPS(生产环境推荐)** #### **生成自签名证书** ```bash mkdir certs openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt ``` #### **启动 HTTPS Registry** ```bash docker run -d \ -p 5000:5000 \ --name my-https-registry \ -v $(pwd)/certs:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ registry:2 ``` --- ### **7. 管理镜像** #### **查看仓库中的镜像** ```bash curl http://localhost:5000/v2/_catalog ``` #### **删除镜像** 直接删除文件系统数据(需进入 Registry 容器操作)或使用工具如 `registry-cli`。 --- ### **注意事项** - **客户端配置**:若 Registry 使用域名或非本地地址,需在 Docker 客户端配置 `/etc/docker/daemon.json` 添加 `insecure-registries`(仅测试环境使用): ```json { "insecure-registries": ["myregistry.example.com:5000"] } ``` - **生产建议**:结合 Nginx 反向代理、Let’s Encrypt 证书、访问日志等提升稳定性。 --- 通过以上步骤,你可以快速搭建一个私有 Docker Registry,用于团队内部镜像分发或 CI/CD 流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值