问题现象:
[root@localhost ~]# docker image pull xxx.com.cn/centos7
Using default tag: latest
Error response from daemon: Get https://xxx.com.cn/v1/_ping: x509: certificate has expired or is not yet valid
可能的原因分析:
linux使用查看date查看当前时间,与证书的有效时间作比对,得出具体的原因,可能为以下二种之一:
1.本机的时间不对;
2.Registry的证书确实已过期;
解决方法:
1.本机的时间不对;
修改本机时间即可
2.Registry的证书确实已过期;
对 Registry 创建 SSL 安全例外,放弃对 Registry 服务器证书合法性校验,但是具有安全风险.
insecure registries 使能后, Docker 将以以下步骤尝试https连接:
首先尝试使用HTTPS.
如果 HTTPS 连接不可用, 使用 HTTP.
centos 在 /etc/docker/ 目录下创建daemon的配置文件 daemon.json ,将你的目标 Registry 所处的 IP 地址段或者具体的服务域名端口号写入 json 文件,
举个例子,笔者的服务器所在网段为10.0.0.0/8.那么内容如下:
|
1
2
3 |
{
"insecure-registries" : ["10.0.0.0/8"]
} |
也可以使用域名加端口号,示例如下:
|
1
2
3 |
{
"insecure-registries" : ["myregistrydomain.com:5000"]
} |
windows 则修改文件 C:\\ProgramData\\docker\\config\\daemon.json ,格式与linux操作的一样.
重启docker服务.
查看是否生效,注意 Insecure Registries 字段.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 |
[root@localhost ~]# docker info
docker info :
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 2
Server Version: 17.05.0-ce
Storage Driver: overlay
Backing Filesystem: xfs
Supports d_type: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 9048e5e50717ea4497b757314bad98ea3763c145
runc version: 9c2d8d184e5da67c95d601382adf14862e4f2228
init version: 949e6fa
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-693.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 24
Total Memory: 62.74GiB
Name: localhost.localdomain
ID: 755F:OEFV:VP3S:BMGQ:VUFW:WGT5:YQHO:EW6T:AAVE:NHS2:TPV3:SBTJ
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
10.0.0.0/8
127.0.0.0/8
Live Restore Enabled: false |
如何查看服务器证书有效期
以火狐浏览器为例
拉取镜像时报错如下:
|
1
2
3 |
k8s@master:~/shiyu$ docker pull reg.netlab.com/tensorflow-cpu
Using default tag: latest
Error response from daemon: Get https://reg.netlab.com/v2/: x509: certificate has expired or is not yet valid |
查询/etc/docker/certs下的证书是否已过期
|
1
2
3 |
root@master:~# openssl x509 -in /etc/docker/certs.d/reg.netlab.com/reg.netlab.com.crt -noout -dates
notBefore=Apr 1 13:21:22 2019 GMT
notAfter=Mar 31 13:21:22 2020 GMT |
显然,该自签证书在2020年3月31号已过期。
重新自签新证书
创建~/certs文件夹存放key和密钥
|
1 |
mkdir -p ~/certs |
生成key
|
1
2 |
cd ~/certs
openssl genrsa -out reg.netlab.com.key 2048 |
生密钥文件
|
1 |
openssl req -newkey rsa:4096 -nodes -sha256 -keyout reg.netlab.com.key -x509 -days 365 -out reg.netlab.com.crt |
填写相关信息
|
1
2
3
4
5
6
7
8
9 |
Country Name (2 letter code) [XX]:CN # 你的国家名称
State or Province Name (full name) []:guangdong
# 省份
Locality Name (eg, city) [Default City]:guagnzhou # 所在城市
Organization Name (eg, company) [Default Company Ltd]:sysu
# 组织名称
Organizational Unit Name (eg, section) []:netlab # 组织单元名称
Common Name (eg, your name or your server's hostname) []:reg.netlab.com # 域名
Email Address []:urmsone@163.com |
至此,证书自签完成。
注:由于是自签名证书,默认是不受Docker信任的,故而需要将证书添加到Docker的根证书中,Docker在CentOS 7/ubuntu 18中,证书存放路径是/etc/docker/certs.d/域名:
|
1
2 |
mkdir -p /etc/docker/certs.d/reg.netlab.com
cp ~/certs/reg.netlab.com.crt /etc/docker/certs.d/reg.netlab.com/ |
重启Docker
|
1 |
systemctl restart docker |
查看registry容器ID
|
1
2
3 |
k8s@master:~$ docker ps |grep registry
3eb5eda4b75e registry.docker-cn.com/library/registry:2 "/entrypoint.sh /etc…" 13 months ago Up 44 minutes 0.0.0.0:443->5000/tcp registry
b84ea71a572f f32a97de94e1 "/entrypoint.sh /etc…" 13 months ago Up About an hour 0.0.0.0:5000->5000/tcp registry_mirror |
根据ID查看rigstry的挂载路径
|
1
2
3
4
5
6
7 |
k8s@master:~$ docker inspect 3eb5eda4b75e
...
"Binds": [
"/root/certs:/certs",
"/home/registry:/var/lib/registry"
]
... |
将刚刚新生成的证书cp到/root/certs:/certs目录下
|
1
2
3
4
5
6 |
root@master:~/certs# ll
总用量 16
drwxr-xr-x 2 root root 4096 Apr 1 2019 ./
drwx------ 8 root root 4096 May 2 14:06 ../
-rw-r--r-- 1 root root 2126 Apr 1 2019 reg.netlab.com.crt
-rw------- 1 root root 3272 Apr 1 2019 reg.netlab.com.key |
重启registry容器
|
1 |
k8s@master:~$ systemctl restart docker |
至此,自签证书更新完毕!
测试
|
1
2
3
4
5 |
k8s@master:~/shiyu$ docker pull reg.netlab.com/tensorflow-cpu
Using default tag: latest
latest: Pulling from tensorflow-cpu
Digest: sha256:68da50778a5f80e0676c4ca617299444fc71677a2d83cacccaf7a08d08cc1df6
Status: Image is up to date for reg.netlab.com/tensorflow-cpu:latest |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持快网idc。如有错误或未考虑完全的地方,望不吝赐教。
原文链接:https://blog.csdn.net/bestjie01/article/details/88644306
相关文章
- 利用FTP和计划任务自动备份网站数据和数据库 2025-05-27
- 服务器技术之硬件冗余技术 2025-05-27
- 服务器是租用还是服务器托管好? 2025-05-27
- 什么是DNS以及它如何影响服务器? 2025-05-27
- 刀片服务器与机架服务器的区别介绍 2025-05-27
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
2025-05-25 48
-
2025-05-26 60
-
2025-05-27 52
-
docker run -v 挂载数据卷异常,容器状态一直是restarting的解决
2025-05-27 99 -
2025-05-27 48


