无法拉取 Discourse 基础镜像,因为 Docker 登录已失效

我刚刚在尝试启动时收到了这个奇怪的错误。

我在两天前更新了此站点,一切正常。

root@support:/var/discourse# ./launcher bootstrap multi

WARNING: We are about to start downloading the Discourse base image
This process may take anywhere between a few minutes to an hour, depending on your network speed

Please be patient

Unable to find image 'discourse/base:2.0.20200429-2110' locally
/usr/bin/docker: Error response from daemon: Get https://registry-1.docker.io/v2/discourse/base/manifests/2.0.20200429-2110: unauthorized: please use personal access token to login.
See '/usr/bin/docker run --help'.
Your Docker installation is not working correctly

See: https://meta.discourse.org/t/docker-error-on-bootstrap/13657/18?u=sam
root@support:/var/discourse# docker version
Client:
 Version:           18.09.6
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        481bc77
 Built:             Sat May  4 02:35:27 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.6
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.8
  Git commit:       481bc77
  Built:            Sat May  4 01:59:36 2019
  OS/Arch:          linux/amd64
  Experimental:     false

root@support:/var/discourse# docker ps
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS              PORTS                  NAMES
1e63a91934e8        local_discourse/multi   "/sbin/boot"        2 days ago          Up 2 days           0.0.0.0:7777->80/tcp   multi
8681e70a72a0        local_discourse/data    "/sbin/boot"        4 months ago        Up 3 weeks                                 data
root@support:/var/discourse# docker ps

这是一个使用 Caddy 作为反向代理的多站点实例,但这是一个非常标准的安装,多年来一直运行正常。

直接执行 docker pull 'discourse/base:2.0.20200429-2110' 会发生什么?

root@support:/var/discourse# docker pull 'discourse/base:2.0.20200429-2110'
来自守护程序的错误响应:Get https://registry-1.docker.io/v2/discourse/base/manifests/2.0.20200429-2110:未授权:请使用个人访问令牌登录
root@support:/var/discourse# 

另外:

root@support:/var/discourse# curl https://registry-1.docker.io/v2/discourse/base/manifests/2.0.20200429-2110
{"errors":[{"code":"UNAUTHORIZED","message":"需要身份验证","detail":[{"Type":"repository","Class":"","Name":"discourse/base","Action":"pull"}]}]}
root@support:/var/discourse# 

您的本地 Docker 守护进程正尝试对该仓库进行身份验证。请检查其 JSON 配置文件。

这听起来像是明智的建议,但我不知道该如何操作。

docker run -it --rm hello-world

同样失败。

我刚将 Docker 升级到 19.03.8(之前是 18.03 左右),并重启了系统。现有的容器都重新启动了。

我完全不清楚是什么变化导致了这个问题。我查看了 /etc/docker/key.json,它看起来和另一台机器上的非常相似。

在 Google 上搜索:“docker unauthorized: please use personal access token to login for public repo”也没有帮助。

docker login 可能会解决您的问题。

您还可以查看 ~/.docker/config.json 文件,检查您拥有凭据的注册表。如果您不需要登录,可以直接从该文件中删除这些凭据。

正是如此!

我前往 Docker 设置/安全 页面,生成了一个新的令牌,然后执行了 docker login --username pfaffman 并粘贴了新密钥。我不明白为什么旧的令牌会突然无法使用,也不知道为何突然需要它。就在两天前,我还顺利地完成了一次升级。

谢谢,Michael!