【问题标题】:"gcloud auth configure-docker" on GCP VM instance with Ubuntu not setup properly?带有 Ubuntu 的 GCP VM 实例上的“gcloud auth configure-docker”设置不正确?
【发布时间】:2019-06-26 21:49:36
【问题描述】:

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

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

并在链接中解释说我需要运行:

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”标志。

【问题讨论】:

    标签: docker google-cloud-platform virtual-machine credentials gcloud


    【解决方案1】:

    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)
    

    【讨论】:

      【解决方案2】:

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

      设置:

      • 选择 Ubuntu 18.10 (GNU/Linux 4.18.0-1005-gcp x86_64)
        添加 20 GB 磁盘 + 允许 http 和 http
        为每个 API 设置访问权限 -> 存储:读写
      • sudo snap remove google-cloud-sdk
      • 卷曲https://sdk.cloud.google.com |重击
      • 重新连接到虚拟机
      • 安装dockerhttps://docs.docker.com/install/linux/docker-ce/ubuntu/
        sudo apt-get remove docker docker-engine docker.io containerd runc
        sudo apt-get 更新
        sudo apt-get install \
        apt-transport-https \
        ca 证书 \
        卷曲 \
        gnupg 代理 \
        软件属性-通用
        curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key 添加 -
        sudo add-apt-repository \
        “deb [arch=amd64] https://download.docker.com/linux/ubuntu \
        $(lsb_release -cs) \
        稳定"
        sudo apt-get 更新
        sudo apt-get install docker-ce docker-ce-cli containerd.io
        sudo docker run hello-world # test
      • sudo usermod -a -G docker LOGIN
      • 重新连接到虚拟机
      • gcloud auth configure-docker

      在 GCP 上测试 docker pull/push

      • docker pull tensorflow/serving
      • docker tag tensorflow/serving gcr.io/BUCKET_NAME/tf-serving
      • docker push gcr.io/BUCKET_NAME/tf-serving
        (如果您在创建 VM 时未授予写入权限:使用“gcloud auth login”)

      现在可以了

      【讨论】:

      • 嗯,不是一个稳定的解决方案。构建 datalab 后,无法在同一个 VM 上工作!经过几次尝试和“gcloud init”,它再次起作用。不是一个有效的解决方案,对不起!
      • 问题是“gcloud auth print-access-token”只在短时间内有效。这就是此解决方案无效的原因。
      • 好的,现在我有一个可行的解决方案。我更新了上面的解决方案。
      【解决方案3】:

      问题可能是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 版本之后。

      【讨论】:

      • gcloud 似乎在那里:which gcloud "/snap/bin/gcloud" sudo ls -la /snap/bin/gcloud "lrwxrwxrwx 1 root root 23 Feb 2 14:32 /snap/bin/ gcloud -> google-cloud-sdk.gcloud”我无法更新或安装组件:“错误:(gcloud.components.install)您无法执行此操作,因为此 Cloud SDK 安装由外部包管理器管理。”
      • sudo apt-get remove google-cloud-sdk && sudo snap remove google-cloud-sdk 应该删除两者,然后可以重新安装独立版本 - 并且添加组件应该可以工作。单机版确实问题少; CentOS 上的包管理器版本也有问题 - 因为它总是尝试更新自己,而不允许这样做 - 以及只能安装打包的组件。
      • 我会从头开始重试。我设法手动安装了版本,我看到 gcloud 使用新版本:Google Cloud SDK [232.0.0] 我仍然有路径警告,我仍然无法推送图像。我会再试一次并使用您上面的选项来删除 google-cloud-sdk,也许我没有正确清理路径。谢谢
      • 有了你的食谱,我成功地安装了 gcloud。 “gcloud auth configure-docker”不再有警告,但在 GCP 容器存储库中推送图像仍然是同样的问题。我的存储桶需要哪些 API 或访问权限?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多