Docker拉取错误:x509证书已过期或尚未生效。

40

问题描述:

我正在尝试使用以下命令从公共仓库中拉取Ubuntu:

docker pull ubuntu

然后我得到了这个结果(之前的命令昨天还可以工作):

"拉取镜像时出错:获取 https://index.docker.io/v1/repositories/library/ubuntu/images:x509: 证书已过期或尚未生效"

docker 版本:

Client:
Version: 1.10.0
API version: 1.22
Go version: go1.5.3
Git commit: 590d510
Built: Thu Feb 4 18:36:33 2016
OS/Arch: linux/amd64

Server:
Version: 1.10.0
API version: 1.22
Go version: go1.5.3
Git commit: 590d510
Built: Thu Feb 4 18:36:33 2016
OS/Arch: linux/amd64

docker 信息:

Containers: 4
Running: 0
Paused: 0
Stopped: 4
Images: 20
Server Version: 1.10.0
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 44
Dirperm1 Supported: true
Execution Driver: native-0.2
Logging Driver: json-file
Plugins: 
Volume: local
Network: bridge null host
Kernel Version: 3.19.0-49-generic
Operating System: Ubuntu 14.04.3 LTS
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 5.815 GiB
Name: ubuntu
ID: Y6OO:23T2:BAPU:DVQJ:HJCJ:USEP:T6EU:PMG4:O4M6:46C7:JKPC:BQHT
WARNING: No swap limit support

uname -a :

内核版本信息:

Linux ubuntu 3.19.0-49-generic #55~14.04.1-Ubuntu SMP Fri Jan 22 11:24:31 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

我验证了我的“日期”,一切都很好。我不知道这个问题可能来自哪里。


对于那些在私有仓库方面遇到问题的人,这个链接可能会有所帮助:https://stackoverflow.com/a/65184268/1938507 - Junaed
20个回答

39
这个命令使我成功了:docker-machine regenerate-certs --client-certs

16
"docker-machine" 不再可用。 - user246392
您可以通过以下方式安装: https://github.com/docker/machine/releases - aberkb

32
这个问题似乎也可能因时间漂移而发生,这是使用Docker Desktop for Windows时的一个问题。运行Docker守护程序的Linux虚拟机上的时钟默认情况下不会与您的Windows主机同步时间。如果像我一样,您在笔记本电脑上工作,并且您的笔记本电脑长时间处于睡眠状态而没有重启或重新启动Docker,则似乎您的Linux虚拟机的时钟可能会漂移足够多,以致出现此错误。但是重新启动Docker可以解决这个问题。
我知道提问者可能不再需要答案,并且这可能不是提问者的问题(没有表明他们是否使用Windows)。但由于我通过自己对此问题的研究找到了这里,所以我认为我应该添加答案。

谢谢,我之前遇到了这个问题是因为我的电脑在英国夏令时3月30日更改时钟时处于睡眠状态,而 Docker 虚拟机正在运行。重新启动 Docker 解决了这个问题。 - danialk
2
在我的情况下,重新启动 Docker Desktop 并不足够(我使用的是 Docker Desktop WSL 2 后端);在机器重启后,问题消失了。 - Matze
退出Docker桌面版并重新启动解决了问题。仅仅重启Docker桌面版没有产生同样的效果,原因不明。谢谢。 - sunny_dev

11

我遇到了这个错误,它与系统日期/时间设置有关。(我知道OP说他的日期没问题,但是为了其他可能看到这篇文章并存在同样问题的人-跟我一样!!- 我加上这个评论)

当我启动我的机器时,出现了一个问题,时间/日期设置不正确。后来,当我的机器拥有正确的日期/时间设置后,我尝试从docker中拉取一个镜像,结果出现了上面的错误。

我重新启动了本地运行的docker守护程序,使其获取新的日期/时间,并且现在可以正常拉取了。


10

如果这种情况发生在 Windows 上的 Docker 中

只需重新启动 Docker Desktop 即可。


1
想补充一点:我点击了“重新启动 Docker...”但是没有生效。然而,完全关闭它,然后再启动就可以了。 - Younes El Ouarti

8

您可以在启动Docker守护进程时使用--insecure-registry选项,或者需要提供有效的证书路径。点击此处了解详情。


5
在我的情况下,我已决定将服务器的日期和时间更改为当前日期。

2

这也发生在我身上:

  • 试图登录Artifactory时。
  • 当我的本地docker守护进程运行了几周后。

我简单地重新启动了本地docker守护进程,然后就可以无错误信息地登录Artifactory了。


2

我在CentOS Vagrant虚拟机上遇到了类似的问题。当我尝试拉取任何Docker镜像时,下面的错误会弹出:

   error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/4b/4bb46517cac397bdb0bab6eba09b0e1f8e90ddd17cf99662997c3253531136f8/data?verify=1597376104-j8KSa2vKDeIZNFuPq0EP9cb3sqc%3D: x509: certificate has expired or is not yet valid

问题在于CentOS Vagrant虚拟机的日期和时区与我的主机不同。将虚拟机的日期和时区更新为与主机相同后,问题得到了解决。

   #check the timezone
   $timedatectl
   #update timezone
   $timedatectl set-timezone America/Toronto
   #update date
   date --set="Fri August 14 3:08:10 EDT 2020"

Unix 时间戳与时区无关。更可能的是更改时区也会同步将时钟调整到正确的时间。 - miken32

1

对于使用 Podman 的任何人,系统重启有帮助。也许重新启动 Podman 机器也有帮助。


0

我在我的QNAP服务器上的私有Docker注册表也遇到了同样的问题。

显然,Container Station 3存在一个错误,即当您从Container Station点击“Renew”时,它不会更新服务器证书。

通过SSH登录到您的NAS,清除/etc/docker/tls中的所有.pem文件,然后使用以下命令重新启动Container Station:

/share/CACHEDEV1_DATA/.qpkg/container-station/container-station.sh restart

将新生成的 ca.pem、cert.pem 和 key.pem 文件从 etc/docker/tls 复制到您的 ~/.docker 文件夹中,这样它应该可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接