构建 Docker registry 私有镜像,解决docker私有仓库push出错问题
适用于:Docker 1.8 环境:Centos7
每个版本的docker修改配置内容都不同,请大家看好安装的docker版本。
1)下载 docker registry私有镜像
docker pull docker.io/registry
2)修改配置文件
gedit /etc/sysconfig/docker
OPTIONS=’–selinux-enabled --insecure-registry 192.168.137.17:5000’
注:IP为修改的部分
3)从容器中启动Registry
docker run -d -p 5000:5000 --name registry -v /home/dockeruser/data:/tmp/registry docker.io/registry
注:-d 表示该容器在后台运行
-p将主机的5000端口与容器的5000端口映射
–name 将容器的名称命名为registry
-v 表示将镜像的存储位置“/tmp/registry” 变更为宿主机的“/home/dockeruser/data”
注:这一步一定要在步骤2)之后,否则修改配置文件不会生效
4)在上传到私有的registry之前,需要指定新的Registry目的地址,需要在镜像名前加上
主机名和端口的前缀。
#docker images
找到要上传镜像的id,添加标签为192.168.137.17:5000/helloworld这种形式
docker tag id 192.168.137.17:5000/helloworld
注:192.168.137.17:5000 为所在主机的IP地址和端口
5)将打标签的镜像上传到私有库
docker push 192.168.137.17:5000/helloworld
显示信息如下:
The push refers to a repository [192.168.137.17:5000/node/helloworld] (len: 1)
Sending image list
Pushing repository 192.168.137.17:5000/node/helloworld (1 tags)
d8bd0657b25f: Image successfully pushed
Pushing tag for rev [df45579dbc81] on
{http://192.168.137.17:5000/v1/repositories/node/helloworld/tags/latest}
遇到问题:
The push refers to a repository [192.168.137.17:5000/node/helloworld] (len: 1) unable to ping registry endpoint https://192.168.137.17:5000/v0/ v2 ping attempt failed with error: Get https://192.168.137.17:5000/v2/: dial tcp 192.168.137.17:5000: connection refused v1 ping attempt failed with error: Get https://192.168.137.17:5000/v1/_ping: dial tcp 192.168.137.17:5000: connection refused
解决方案:
gedit /etc/sysconfig/docker
OPTIONS=’–selinux-enabled --insecure-registry 192.168.137.17:5000’
注:这一步一定要在创建私有仓库的容器之前【步骤2)】,否则修改配置文件不会生效
[root@node ~]# docker push 172.18.18.90:5000/busybox:v1 The push refers to repository [172.18.18.90:5000/busybox] Get https://172.18.18.90:5000/v2/: http: server gave HTTP response to HTTPS client
注意了,这是报错了,需要https的方法才能上传,我们可以修改下daemon.json来解决:
[root@node ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": [ "https://registry.docker-cn.com"],
"insecure-registries": [ "172.18.18.90:5000"]
}
添加私有镜像服务器的地址,注意书写格式为json,有严格的书写要求,然后重启docker服务:
[root@node ~]# systemctl restart docker
参考: https://blog.csdn.net/chen798213337/article/details/51046175 https://www.linuxidc.com/Linux/2018-03/151308.htm
- 【算法】哈希表的诞生
- java中获得文件大小代码
- 【Java】泛型学习笔记
- 读写文件具体操作
- 【算法】赫夫曼树(Huffman)的构建和应用(编码、译码)
- ERROR 1396 (HY000): Operation CREATE USER faile...
- hive安装后测试
- 【算法】论平衡二叉树(AVL)的正确种植方法
- 【JavaScript】 JS面向对象的模式与实践
- log4j:ERROR Failed to load driver
- 前端MVC Vue2学习总结(七)——ES6与Module模块化、Vue-cli脚手架搭建、开发、发布项目与综合示例
- 前端MVC Vue2学习总结(六)——axios与跨域HTTP请求、Lodash工具库
- spring之config.xml完整版示例
- 前端MVC Vue2学习总结(五)——表单输入绑定、组件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 教你一招实现Linux中的文本比对
- PHP基于swoole多进程操作示例
- PHP格式化显示时间date()函数代码
- php函数式编程简单示例
- php进程(线程)通信基础之System V共享内存简单实例分析
- Laravel5.1 框架数据库查询构建器用法实例详解
- php swoole多进程/多线程用法示例【基于php7nts版】
- PHP JWT初识及其简单示例
- PHP保存Base64图片base64_decode的问题整理
- php实现小程序支付完整版
- Laravel5.1 框架路由基础详解
- Laravel框架实现抢红包功能示例
- Laravel5.1 框架模型创建与使用方法实例分析
- php实现单笔转账到支付宝功能
- PHP发送邮件确认验证注册功能示例【修改别人邮件类】