无法理解我在做什么...
在基于Container Optimized OS的全新计算引擎实例上执行下一步:
queryset = Company.objects.filter(point = None) # using None
queryset = Company.objects.filter(point__isnull = True) # explicitly asking for Null
docker-credential-gcr configure-docker
并得到以下信息:
无法在本地找到映像'gcr.io/around-dev/firebase-service-image:latest' 拉存储库gcr.io/around-dev/firebase-service-image 码头工人:未经授权:需要身份验证。 请参阅“ docker run --help”。
然后实际上尝试使用sudo docker run --detach --name=echo --net=esp_net gcr.io/around-dev/firebase-service-image:latest
登录并运行,但仍然遇到相同的错误。
毕竟我的.docker / .config.json看起来像:
docker-credential-gcr gcr-login
显然没有存储凭据。有人可以向我解释我在做什么错吗? 预先感谢。
答案 0 :(得分:7)
您看到此错误的原因是,您先运行docker-credential-gcr configure-docker
而不先运行sudo
,然后再运行sudo docker run ...
。运行sudo docker
时,它将在/root/.docker/
中查找配置文件,但找不到任何内容,从而引发authentication required
错误。
sudo docker-credential-gcr configure-docker
无法解决运行COS时,您没有对所有目录的写权限。只有几个目录是可写的,/root
不是其中之一。因此,以root用户身份运行docker-credential-gcr
失败,因为它无法在$HOME
目录(恰好是/root
)内写入docker配置文件。
有关可写目录的更多详细信息: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
答案 1 :(得分:0)
当我想将图像推送到GCR时遇到了相同的问题。我还使用sudo
运行了docker。我通过将用户添加到docker用户组来解决问题,如docker postinstall guide所示:
sudo groupadd docker
sudo usermod -aG docker $USER
然后注销并再次登录
答案 2 :(得分:0)
如果您有私有VPC,并且实例没有外部IP,则会收到超时错误。解决此问题的一种方法是在子网级别启用private_ip_google_access
。这样一来,您无需例外即可访问google资源,而无需在实例上使用外部IP地址。
答案 3 :(得分:0)
我在使用COS,也遇到类似的问题。 COS文档使它看起来应该像运行2条命令一样简单。
$ docker-credential-gcr configure-docker
$ docker run --rm gcr.io/<your-project>/<your-image>
该文件在~/.docker/config.json
中创建。但是我无法拉出私有映像来运行它。我可以成功提取公共图像。
在一天中的大部分时间里,我都把头扑在墙上,然后尝试了登录命令docker-credential-gcr gcr-login
。我的帐户上有2factor身份验证设置,当我运行该命令时,它给了我一个我必须访问才能输入身份验证令牌的URL。按照这些说明进行操作之后,我现在可以成功地从私有注册表中提取图像了。
我不确定这是否是正确的工作流程,因为文档中未对此进行介绍。
答案 4 :(得分:0)
另一种选择是在docker中使用gcloud-image,这本身就是docker基本映像
假设您在$ PWD / gcr-auth.json中有服务帐户密钥文件 只需将docker-socks和您的服务json密钥传递给卷
docker run -exec \
-v $PWD:$PWD \
-v /var/run/docker.sock:/var/run/docker.sock \
google/cloud-sdk \
sh -c
'gcloud auth activate-service-account --key-file=/somepath/gcr-auth.json && gcloud docker -- pull gcr.io/some-project/myimage:latest'
提取完成后,图像又回到了主机上