总结一下 建立docker 私有仓库 上传镜像失败的各种原因和解决办法
1 端口没权限
案例:公司申请的云服务器添加了安全组,所有端口都关闭入网访问权,按需开放端口。很不幸docker 私有仓库本地映射端口一般是5000,这个端口并没有开放权限,所以呢上传镜像到docker私有仓库 死活不行,报错Timeout exceeded while awaiting headers ,具体如下:
[root@hw-biz-alpha admin]# docker push 139.9.xxx.xxx:5000/myhello
The push refers to repository [139.9.xxx.xxx:5000/myhello]
Get http://139.9.xxx.xxx:5000/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
当然也有可能是主机服务器防火墙端口没开的问题
2 http 推送镜像默认不支持
docker 默认不允许http 方式推送镜像。但我们可以通过 docker 的配置选项来取消这个限制
centos7 的docker配置文件 /etc/docker/daemon.json ,如果这个文件不存在就自己创建,其他系统没注意ubuntu16好像也是
http 方法推送镜像报错 http: server gave HTTP response to HTTPS client,具体如下:
[root@hw-biz-alpha admin]# docker push 139.9.xxx.xxx:5000/myhello
The push refers to repository [139.9.xxx.xxx:5000/myhello]
Get https://139.9.xxx.xxx:5000/v2/: http: server gave HTTP response to HTTPS client
解决:配置支持http方式推送镜像
在docker 配置文件中配置insecure-registries 如下:
注: 下面139.9.xxx.xxx 是我这里想要配置的地址,你们需要改成自己想要配置的地址,别无脑照着复制,registry-mirrors 配置的是国内阿里提供的镜像加速地址,不用加速的话访问官网的会很慢。2个配置中间有个逗号 ','别漏了,这个配置是json格式的。
vi /etc/docker/daemon.json
{
"registry-mirrors": [
"https://tnxkcso1.mirror.aliyuncs.com"
],
"insecure-registries": [
"139.9.xxx.xxx:5000"
]
}
3 配置了docker http推送,但是没有重启docker
高高兴兴配置了docker http推送 ,保存退出,开始推送到私有镜像,然后还是失败!
配置后我们需要重启docker,不然配置没生效!
centos7 docker 重启命令
sudo systemctl restart docker
再次docker push xxx ,终于成功了!
4 多主机间(跨主机)http访问docker私有镜像仓库
单机可以用http方式访问自己构建的docker私有镜像仓库,但是其他机器就不能用http方式访问这个docker私有镜像仓库
原因:每一个要使用http方式访问私有镜像仓库的机器上docker 都要配置 insecure-registries
解决:
vi /etc/docker/daemon.json
{
"insecure-registries": [
"139.9.xxx.xxx:5000"
]
}
重启docker
sudo systemctl restart docker