共计 2136 个字符,预计需要花费 6 分钟才能阅读完成。
系统【Centos 7.1.1503】
python【Python 3.6.1】
最近在写 docker 的一些小工具,docker registry 使用要求必须是 https 方式进行连接, 如果不是 https 连接则会报错不安全。
docker login registry.xxx.com
所以我在本地搭建了私有 registry 基于 v2 版本,网上很多都是 v1 版本的,那个已经淘汰过时了,很多人会坑在那个上面.
我们访问 docker registry api 可以查询镜像列表和 tag 列表,这是我目前做的最基本的功能。
我使用 pycharm 进行开发,因为我使用自己生成的 CA 证书,我之前就已经把 CA 导入本地可信任列表中所以我用 python 访问一直没有问题。
当我把脚本放到 centos7 环境时就不行了。
代码如下
#!/usr/bin/python
# -*- coding: utf-8 -*-
#by typ
#docker registry 列表
import urllib.request
import sys
import json
import ssl
registry_url="https://registry.typ.com/"
def _conn(url):
try:
passwordmanager = urllib.request.HTTPPasswordMgrWithDefaultRealm()
passwordmanager.add_password(None, url, 'typ', '123456')
handler = urllib.request.HTTPBasicAuthHandler(passwordmanager)
opener = urllib.request.build_opener(handler)
response = opener.open(url)
data = response.read().decode('utf-8')
data_json = json.loads(data)
return data_json
except Exception as e:
print("连接私有仓库错误... 请检查")
return False
在 linux 上运行报错如下
我需要把自定义错误去掉,不然无法打印错误信息
错误如下:
错误显示证书不被认证,因为我们使用的是自己颁发的证书所以无法认证.
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
解决办法
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
import urllib.request
import sys
import json
import ssl
#私有仓库地址
registry_url="https://registry.typ.com/"
ssl._create_default_https_context = ssl._create_unverified_context
def _conn(url):
try:
passwordmanager = urllib.request.HTTPPasswordMgrWithDefaultRealm()
passwordmanager.add_password(None, url, 'typ', '123456')
handler = urllib.request.HTTPBasicAuthHandler(passwordmanager)
opener = urllib.request.build_opener(handler)
response = opener.open(url)
data = response.read().decode('utf-8')
data_json = json.loads(data)
return data_json
except Exception as e:
print("连接私有仓库错误... 请检查")
return False
成功取值
正文完