首页 > 解决方案 > 无法从 Container Optimized Compute Engine 的私有 GCR 中提取映像

问题描述

无法理解我做错了什么......

在基于容器优化操作系统的新计算引擎实例上执行后续步骤:

并得到以下信息:

无法在本地找到图像 'gcr.io/around-dev/firebase-service-image:latest' 拉取存储库 gcr.io/around-dev/firebase-service-image docker:未授权:需要身份验证。请参阅“docker run --help”。

然后尝试实际登录docker-credential-gcr gcr-login并运行,但仍然得到同样的错误。毕竟我的 .docker/.config.json 看起来像:

 {
        "auths": {},
        "credHelpers": {
                "asia.gcr.io": "gcr",
                "eu.gcr.io": "gcr",
                "gcr.io": "gcr",
                "staging-k8s.gcr.io": "gcr",
                "us.gcr.io": "gcr"
        }

显然没有存储凭据。有人可以向我解释我做错了什么吗?提前致谢。

标签: dockergoogle-compute-enginegoogle-container-registry

解决方案


为什么你会看到这个

您看到此错误是因为您在docker-credential-gcr configure-docker没有sudothen的情况下运行sudo docker run ...。运行时sudo docker,它在里面查找配置文件,/root/.docker/没有找到任何东西,从而抛出authentication required错误。

为什么跑步sudo docker-credential-gcr configure-docker不能解决它

当您运行 COS 时,您没有对所有目录的写入权限。只有少数目录是可写的,并且/root不是其中之一。因此, docker-credential-gcr以 root 身份运行会失败,因为它无法在$HOME目录中写入 docker 配置文件(恰好是/root)。

有关可写目录的更多详细信息:https ://cloud.google.com/container-optimized-os/docs/concepts/security#filesystem

修复它

1 - 覆盖$HOME

sudo HOME=/home/root /usr/bin/docker-credential-gcr configure-docker

sudo HOME=/home/root docker run --detach --name=echo --net=esp_net gcr.io/around-dev/firebase-service-image:latest

2 - 手动指定配置文件位置

您还可以在每个命令中包含 docker config 目录的路径。例如,如果您知道 docker 在/home/root/.docker目录中配置了凭据,则可以运行以下命令:sudo docker --config /home/root/.docker pull gcr.io/my-project/alpine:3.2


推荐阅读