问题
所以...我测试了许多不同的命令,除了
docker pull gcr.io/...
它总是说我没有足够的权限:
错误:未经授权:您没有执行此操作所需的权限,并且您的凭据可能无效。要验证您的请求,请按照以下步骤操作:https://cloud.google.com/container-registry/docs/advanced-authentication
为什么会这样呢?
我 100% 确定我已正确登录 Google Cloud,因为我可以运行kubectl ...
需要完全相同授权的命令。
我的环境
主持人
我正在 amd64 上运行 Linux Ubuntu(此时为 22.04)。
客人
由于各种原因,我需要在该机器上运行虚拟机。所以我安装了另一个 Ubuntu 22.04,它在 VirtualBox VM 中运行。如上所述,一切都运行得很好。
码头工人
此时,docker安装为snap
20版本。
笔记:我无法使用默认的 apt-get 软件包,因为这些软件包没有更新,因此它非常旧。
失败的命令类似于:
docker pull gcr.io/<path>/<to>/<file>:main-123456
答案1
这里有几个问题:
快照码头工人
docker
in的版本snap
受 保护apparmor
。
身份验证失败,因为需要从以句点开头的子目录中读取文件(可能是多个?)(例如.docker/...
,尽管该文件已在 中授权apparmor
)。
正如问题中提到的,旧版本不会削减它。所以我们只剩下新的Docker 桌面版本代替。
Docker 桌面
(请参阅下面有关安装、启动和使用的注释)
Docker Desktop 是一个新的野兽。它具有更多的安全功能,在某种程度上这很好,但它很烦人,因为这意味着使用更多的资源。具体来说,它使用您的计算机 VM 功能来运行 docker。这是隔离可以以 root 身份运行的环境的好方法。
这就是你遇到另一个问题的地方!如果您已经在虚拟机中运行,那么来宾很可能无法自行创建嵌套的虚拟机。除非您确保授权虚拟机创建嵌套虚拟机,否则这将会失败。 VirtualBox 中有一个专门用于此目的的选项,您可以在界面中进行调整。
这是一个屏幕截图,显示默认值(即未授权!)请确保启用 Nester VT-x/AMD-V标志被选中。如果未选中,您必须关闭虚拟机,选中该框,然后重新启动虚拟机。
额外说明
移除按扣
首先,您需要移除按扣。这是使用以下方法完成的:
snap remove docker
警告:Docker 将对您现有的容器和镜像进行完整备份,以防您在重新安装 Docker 时想要恢复它们。这可能需要很长时间,因为大多数容器都是非常大的文件。我建议您先花点时间删除这些:
$ docker ps -a
$ docker rm <container-id>
$ ...repeat until `docker ps -a` returns an empty list...
$ docker images
$ docker rmi <image-id>
$ ...repeat until `docker images` returns an empty list...
笔记:您可能需要使用--force
删除某些图像。既然我们要摆脱一切,显然安全的。
安装桌面 Docker
我假设您可以自己安装此版本。 Ubuntu 的说明可以在这里找到:
https://docs.docker.com/desktop/install/ubuntu/#install-docker-desktop
笔记:与普通 PPA 相反,他们的 PPA 不允许您直接安装.deb
.相反,您必须“手动”下载 .deb 并安装它。然后它会收集所有必要的依赖项等。如果你问我的话,这很奇怪。
启用/启动
安装后,您就可以启动它。就我而言,我使用了以下内容:
$ systemctl --user enable docker-desktop
$ systemctl --user start docker-desktop
第一次不行,多试几次……
用户泊坞窗
一旦桌面窗口打开并且没有用旋转轮说“启动 Docker”,Docker 就会启动并运行,然后您可以在 shell 中键入命令:
docker pull gcr.io/<path>
预计这会像魅力一样发挥作用。
旁注:该docker-compose
命令现在docker compose
(没有破折号),因此是 docker 的子命令,而不是单独的工具。