无法从Container Optimized Compute Engine中从私有GCR中提取图像

Igo*_*hev 3 google-compute-engine docker google-container-registry

无法得到我做错的事......

基于Container Optimized OS在新的计算引擎实例上执行后续步骤:

  • docker-credential-gcr configure-docker
  • sudo docker run --detach --name=echo --net=esp_net gcr.io/around-dev/firebase-service-image:latest

得到以下内容:

无法在本地找到图像'gcr.io/around-dev/firebase-service-image:latest'拉动存储库gcr.io/around-dev/firebase-service-image docker:unauthorized:需要验证.请参阅'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"
        }
Run Code Online (Sandbox Code Playgroud)

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

Phi*_*ers 7

你为什么看到这个

你看到这个错误,因为你docker-credential-gcr configure-docker没有sudo然后运行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