docker - 无法从 Container Optimized Compute Engine 的私有 GCR 中提取映像
问题描述
无法理解我做错了什么......
在基于容器优化操作系统的新计算引擎实例上执行后续步骤:
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:未授权:需要身份验证。请参阅“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
then的情况下运行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
推荐阅读
- flutter - 错误:“列表”类型的值
' 不能分配给 'List 类型的变量 ' - android - 如何在纵向锁定设备时获取设备方向
- python - Django 是如何知道调用索引的?
- sql - 在 DBT 中更新表
- javascript - 需要更改与 FacetWP 相关的 javascript 片段
- javascript - 更简洁的方法来设置对象可能为空或未定义的对象属性
- javascript - 如何从在线传单地图中抓取位置数据?
- gatsby - 如何在 gatsby 云中安装插件?
- reactjs - 可以通过复制路由来简化非常深的嵌套 React 路由吗?
- node.js - Firebase Cloud Function 调用了错误的集合,即使它引用了另一个路径