問題現象:
[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 連接可達但是證書不可用, 忽略證書錯誤;
- 如果 HTTPS 連接不可用, 使用 HTTP.
centos 在 /etc/docker/ 目錄下創建daemon的配置文件 daemon.json ,將你的目標 Registry 所處的 IP 地址段或者具體的服務域名端口號寫入 json 文件,
舉個例子,筆者的服務器所在網段爲10.0.0.0/8.那麼內容如下:
{
"insecure-registries" : ["10.0.0.0/8"]
}
也可以使用域名加端口號,示例如下:
{
"insecure-registries" : ["myregistrydomain.com:5000"]
}
windows 則修改文件 C:\ProgramData\docker\config\daemon.json ,格式與linux操作的一樣.
- 重啓docker服務.
- 查看是否生效,注意 Insecure Registries 字段.
[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
如何查看服務器證書有效期
以火狐瀏覽器爲例
參考:
https://docs.docker.com/engine/reference/commandline/dockerd/#insecure-registries