Centos 7中Docker私有仓库的搭建方法

发布时间 - 2026-01-11 00:34:58    点击率:

系统配置: CentOS 7 内核 3.10.0-229.20.1.el7.x86_64 Docker version 1.8.2

运行 docker registry

执行下列命令:

复制代码 代码如下:
docker run /     -d /     --name private_registry  --restart=always /     -e SETTINGS_FLAVOUR=dev /     -e STORAGE_PATH=/registry-storage /     -v /data/docker/private-registry/storage:/registry-storage /     -u root /     -p 5000:5000 /     registry:2

如果本地已有registry镜像,它会直接运行,否则它会到docker hub共有仓库下载之后再运行, -v /data/docker/private-registry/storage:/registry-storage 该命令将之后私有仓库的镜像存放到本地。

之后执行:

复制代码 代码如下:
docker tag docker.io/docker:1.8 192.168.100.9:5000/docker:1.8  docker push 192.168.100.9:5000/docker:1.8

这时会报很多错误:

复制代码 代码如下:
FATA[0000] Error response from daemon: v1 ping attempt failed with error: Get https://192.168.100.9:5000/v1/_ping: tls: oversized record received with length 20527/.  If this private registry supports only HTTP or HTTPS with an unknown CA certificate,please add  `--insecure-registry 192.168.100.9: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/192.168.100.9:5000/ca.crt

最简单的解决方法是修改 /etc/sysconfig/docker 文件添加 INSECURE_REGISTRY='--insecure-registry 192.168.100.9:5000' , Ubuntu 14.04 的配置文件在 /etc/default/docker 在该文件里添加 DOCKER_OPTS="--insecure-registry 192.168.100.9:5000" ,添加过之后重启 docker ,重新运行 docker registry 即可生效。这样做的缺点是你的私有仓库不安全,其次,其他要下载或者上传镜像的机器都要修改相应的配置文件。

安全的做法是去认证机构购买签名证书,在此我们使用自认证的方式。

自签名认证

首先执行:

复制代码 代码如下:
# mkdir -p certs && openssl req /   -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key /   -x509 -days 365 -out certs/domain.crt  Country Name (2 letter code) [AU]:CN State or Province Name (full name) [Some-State]:Beijing Locality Name (eg, city) []:Beijing Organization Name (eg, company) [Internet Widgits Pty Ltd]:SERCXTYF Organizational Unit Name (eg, section) []:IT Common Name (e.g. server FQDN or YOUR name) []:192.168.100.9:5000 Email Address []:xxx.yyy@ymail.com

生成认证证书和密钥。接下来将刚生成的 certs/domain.crt 复制到 /etc/docker/certs.d/192.168.100.9:5000/ca.crt ,之后重启 docker 并运行:

复制代码 代码如下:
docker run /     -d /     --name private_registry  --restart=always /     -e SETTINGS_FLAVOUR=dev /     -e STORAGE_PATH=/registry-storage /     -v /data/docker/private-registry/storage:/registry-storage /     -u root /     -p 5000:5000 /     -v /root/certs:/certs /     -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt /     -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key /     registry:2

这样之后应该可以成功了吧,于是执行:

# docker push 192.168.100.9:5000/docker:1.8

结果它还是报错了:

复制代码 代码如下:
The push refers to a repository 192.168.100.9:5000/docker:1.8 unable to ping registry endpoint https://192.168.100.9:5000/v0/ v2 ping attempt failed with error: Get https://192.168.100.9:5000/v2/: x509: cannot validate certificate for 192.168.100.9 because it doesn't contain any IP SANs v1 ping attempt failed with error: Get https://192.168.100.9:5000/v1/_ping: x509: cannot validate certificate for 192.168.100.9 because it doesn't contain any IP SANs

解决方法:修改 /etc/pki/tls/openssl.cnf 配置,在该文件中找到 [ v3_ca ] ,在它下面添加如下内容:

复制代码 代码如下:
[ v3_ca ] # Extensions for a typical CA subjectAltName = IP:123.56.157.144

之后再次重启docker,并重新 run registry ,启动成功之后,执行:

复制代码 代码如下:
# docker push 192.168.100.9:5000/docker:1.8  The push refers to a repository [192.168.100.9:5000/docker] (len: 1) 793ab2f3d322: Pushed  e1232be51d09: Pushed  71ef33d4e0e5: Pushed  e9d235d200dc: Pushed  3fb9a265fbfc: Pushed  9f50b4b1f00b: Pushed  413668359dd0: Pushed  da0daae25b21: Pushed  f4fddc471ec2: Pushed  1.8: digest: sha256:28a02a8a50b750a300904b53e802bdf76516d591b2d233ae21cf771b8c776d44 size: 17621

至此,上传终于成功。换台机器下载刚上传的镜像:

复制代码 代码如下:
# docker pull  192.168.100.9:5000/docker:1.8  Trying to pull repository 192.168.100.9:5000/docker ... failed unable to ping registry endpoint https://192.168.100.9:5000/v0/ v2 ping attempt failed with error: Get https://192.168.100.9:5000/v2/: x509: certificate signed by unknown authority  v1 ping attempt failed with error: Get https://192.168.100.9:5000/v1/_ping: x509: certificate signed by unknown authority

仔细分析错误信息,发现是没有证书,将在 192.168.100.9 上生成的证书拷贝到相应的目录下 /etc/docker/certs.d/192.168.100.9:5000/ca.crt ,拷贝之后重启 docker ,再次执行:

复制代码 代码如下:
# docker pull  192.168.100.9:5000/docker:1.8  1.8: Pulling from docker 9d58b928bc15: Pull complete  dbe7e8a7807c: Pull complete  ce14982b73d4: Pull complete  b9f70905d763: Pull complete  b9c93a2fb3cf: Pull complete  1321a4d5d3ea: Pull complete  5941048a7e27: Pull complete  f57edf7c2e71: Pull complete  5de2ade00f1b: Pull complete  Digest: sha256:28a02a8a50b750a300904b53e802bdf76516d591b2d233ae21cf771b8c776d44 Status: Downloaded newer image for 192.168.100.9:5000/docker:1.8

至此, docker registry 私有仓库安装成功。如果要部署到生产环境还需要进一步的配置,具体可以参考Registry Configuration Reference。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# docker  # 私有仓库  # 创建私有仓库  # docker私有仓库搭建  # Docker搭建本地私有仓库的详细步骤  # Docker Registry 私有仓库搭建详细步骤  # 详解docker私有仓库搭建与使用实战  # 详解Docker私有仓库最简便的搭建方法  # Docker 搭建私有仓库(registry、harbor)  # 详解Docker私有仓库Registry的搭建验证  # 搭建Docker私有仓库(自签名方式)  # Docker搭建私有仓库(registry与Harbor)的实现  # docker私有仓库的搭建和使用详解  # 如何搭建配置Docker私有仓库的实现步骤  # 镜像  # 重启  # 上传  # 会报  # 它会  # 解决方法  # 该文件  # 配置文件  # 都要  # 将在  # 在此  # 已有  # 错了  # 这样做  # 他要  # 最简单  # 错误信息  # 还需  # 不安全  # 大家多多 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速搭建安全的FTP站点?  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  HTML 中动态设置元素 name 属性的正确语法详解  微信公众帐号开发教程之图文消息全攻略  详解jQuery中的事件  Android自定义listview布局实现上拉加载下拉刷新功能  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  如何快速建站并高效导出源代码?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  如何安全更换建站之星模板并保留数据?  js代码实现下拉菜单【推荐】  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  如何在腾讯云服务器快速搭建个人网站?  如何用AI帮你把自己的生活经历写成一个有趣的故事?  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  文字头像制作网站推荐软件,醒图能自动配文字吗?  北京网站制作的公司有哪些,北京白云观官方网站?  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  Laravel如何实现数据库事务?(DB Facade示例)  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  Laravel如何配置和使用缓存?(Redis代码示例)  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  昵图网官方站入口 昵图网素材图库官网入口  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  如何用5美元大硬盘VPS安全高效搭建个人网站?  黑客如何利用漏洞与弱口令入侵网站服务器?  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  如何在宝塔面板创建新站点?  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  Python文件操作最佳实践_稳定性说明【指导】  Laravel API资源类怎么用_Laravel API Resource数据转换  如何快速搭建高效WAP手机网站?  如何在建站之星网店版论坛获取技术支持?  如何快速查询域名建站关键信息?  如何在腾讯云免费申请建站?  jQuery validate插件功能与用法详解  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  如何在阿里云ECS服务器部署织梦CMS网站?  如何基于PHP生成高效IDC网络公司建站源码?  Laravel如何优化应用性能?(缓存和优化命令)  如何在新浪SAE免费搭建个人博客?