"gcloud auth configure-docker" 在 Ubuntu 的 GCP VM 实例上设置不正确?

"gcloud auth configure-docker" on GCP VM instance with Ubuntu not setup properly?

我使用 Ubuntu 18.10 在 GCP 上创建了一个 VM 实例。当我在没有任何修改的情况下 SSH VM 并尝试:

gcloud info

我收到一些警告:

System PATH: [/snap/google-cloud-sdk/66/usr/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/game
s:/snap/bin]
Python PATH: [/snap/google-cloud-sdk/66/lib/third_party:/snap/google-cloud-sdk/66/lib:/snap/google-cloud-sdk/66/usr/lib/python2.7/:/snap
/google-cloud-sdk/66/usr/lib/python2.7/plat-x86_64-linux-gnu:/snap/google-cloud-sdk/66/usr/lib/python2.7/lib-tk:/snap/google-cloud-sdk/6
6/usr/lib/python2.7/lib-old:/snap/google-cloud-sdk/66/usr/lib/python2.7/lib-dynload]
Cloud SDK on PATH: [False]
Kubectl on PATH: [False]
WARNING: There are old versions of the Google Cloud Platform tools on your system PATH.
  /usr/bin/snap

如果我尝试通过以下方式进行身份验证:

sudo gcloud auth configure-docker

我明白了:

WARNING: `docker-credential-gcloud` not in system PATH.
gcloud's Docker credential helper can be configured but it will not work until this is corrected.
WARNING: `docker` not in the system PATH.
`docker` and `docker-credential-gcloud` need to be in same PATH in order to work correctly together.
gcloud's Docker credential helper can be configured but it will not work until this is corrected.
The following settings will be added to your Docker config file 

似乎安装了一个相当新的 gcloud 版本:

sudo gcloud version

Google Cloud SDK 230.0.0
alpha 2019.01.11
beta 2019.01.11
bq 2.0.39
core 2019.01.11
gsutil 4.35
kubectl 2019.01.11

似乎不​​允许我在此类实例上更新 gcloud。

然后我安装了Docker并拉取了一个docker镜像。

sudo snap install docker
sudo docker pull tensorflow/serving

这工作正常。 问题是我无法将镜像推送到 GCP Container Registry:

sudo docker tag tensorflow/serving gcr.io/xxx/tf-serving
sudo docker push gcr.io/xxx/tf-serving
Unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request
st, follow the steps in https://cloud.google.com/container-registry/docs/advanced-authentication

并且在 link 中解释说我需要 运行:

sudo gcloud auth configure-docker

我该如何解决这个问题?当我 SSH 虚拟机时,问题已经存在了?

WARNING: `docker-credential-gcloud` not in system PATH.

我可以毫无问题地将图像推送到 DockerHub。

我尝试重新安装 google-cloud-sdk:

sudo apt-get update && sudo apt-get install google-cloud-sdk

但现在我需要使用:

sudo gcloud alpha auth configure-docker

最后还是推不了图

这似乎与某些路径问题有关:

Cloud SDK on PATH: [False]
Kubectl on PATH: [False]
WARNING: There are old versions of the Google Cloud Platform tools on your system PATH.
  /usr/bin/snap

有什么想法吗?我确实一步一步地遵循了 GCP 文档。我还查看 GCP IAM 以授予对我的存储桶的一些访问权限。

我是 GCP 和 Cloud 的新手,所以我可能遗漏了一些明显的东西。顺便说一句,我需要使用 shell 脚本构建一个 Docker 映像,所以我需要使用这种类型的 VM,因为在另一个已经预装了很多东西的 VM 上安装了带有 "noexec" 标志。

问题可能是 snap 安装;只需从系统中删除 /snap/google-cloud-sdk。或检查 which gcloud 以查看甚至使用了哪个。 apt 版本似乎没有这些 docker 包可用 - 而且,$PATH 只列出了 snap 版本。

普通,组件可以更新为:

gcloud components update

或列出:

gcloud components list

或已安装:

gcloud components install docker-credential-gcr 

建议简单地安装单机版:

curl https://sdk.cloud.google.com | bash

从文件系统和 $PATH 中删除 snapapt 版本后。

这是现在的工作(感谢 Google 的帮助)

设置:

  • 选择Ubuntu 18.10 (GNU/Linux 4.18.0-1005-gcp x86_64)
    添加 20 GB 磁盘 + 允许 http 和 http
    为每个设置访问权限 API -> Storage : Read Write
  • sudo snap remove google-cloud-sdk
  • 卷曲 https://sdk.cloud.google.com | bash
  • 重新连接到虚拟机
  • 安装dockerhttps://docs.docker.com/install/linux/docker-ce/ubuntu/
    sudo apt-get remove docker docker-engine docker.io containerd 运行c
    sudo apt-get update
    sudo apt-get install \
    apt-transport-https \
    ca 证书 \
    卷曲 \
    gnupg-agent \
    软件属性通用
    卷曲-fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository \
    “deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) \
    稳定
    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io
    须藤docker运行你好世界#测试
  • sudo usermod -a -G docker 登录
  • 重新连接到虚拟机
  • gcloud auth 配置-docker

在 GCP

上测试 docker pull/push
  • docker拉tensorflow/serving
  • docker 标签 tensorflow/serving gcr.io/BUCKET_NAME/tf-serving
  • docker 推 gcr.io/BUCKET_NAME/tf-serving
    (如果您在创建 VM 时未授予写入权限:使用 "gcloud auth login")

现在可以了

Snap 包在 /snap/google-cloud-sdk/current/bin/ 中包含 docker-credential-gcloud。您可以使用以下方式将其符号链接到 /usr/local/bin

sudo ln -s /snap/google-cloud-sdk/current/bin/docker-credential-gcloud /usr/local/bin

之后,将 Docker 个图像推送到 Google Container Registry (gcr.io) 工作正常。

我还尝试 sudo snap alias google-cloud-sdk.docker-credential-gcloud docker-credential-gcloud 创建一个类似于 gcloud 本身的符号链接。但是失败并出现以下错误:

error: cannot perform the following tasks:
- Setup manual alias "docker-credential-gcloud" => "docker-credential-gcloud" for snap "google-cloud-sdk" (cannot enable alias "docker-credential-gcloud" for "google-cloud-sdk", target application "docker-credential-gcloud" does not exist)