无法理解我做错了什么......
在基于容器优化操作系统的新计算引擎实例上执行后续步骤:
docker-credential-gcr configure-docker
sudo docker run --detach --name=echo --net=esp_net gcr.io/around-dev/firebase-service-image:latest
并得到以下信息:
Unable to find image 'gcr.io/around-dev/firebase-service-image:latest' locally Pulling repository gcr.io/around-dev/firebase-service-image docker: unauthorized: authentication required. See '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"
}
显然没有存储凭据。有人可以向我解释我做错了什么吗?
提前致谢。
最佳答案
为什么你会看到这个
您看到此错误是因为您运行了 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
关于docker - 无法从 Container Optimized Compute Engine 的私有(private) GCR 中提取镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51236449/