4

I created a VM instance on GCP using Ubuntu 18.10. When I SSH the VM without any modification and try:

gcloud info

I got some Warning:

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

If I try to authenticate with:

sudo gcloud auth configure-docker

I see:

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 

It seems that a quite recent version of gcloud is installed:

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

It doesn't seem I am allowed to update gcloud on such instance.

Then I installed Docker and pulled a docker image.

sudo snap install docker
sudo docker pull tensorflow/serving

This is working fine. The issue is that I cannot push the image on 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

and in the link it is explained that I need to run:

sudo gcloud auth configure-docker

How do I fix the issue? The issue is already present when I SSH the VM ?

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

I can push the image on DockerHub without any issue.

I tried to reinstall google-cloud-sdk:

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

But now I need to use:

sudo gcloud alpha auth configure-docker

and the end I still cannot push the image.

It seems to be related to some path issue:

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

Any idea? I did follow the GCP documentation step by step. I also look at GCP IAM to grant some access on my bucket.

I am new on GCP and Cloud so I am probably missing something obvious. By the way, I need to build a Docker image using a shell script so I need to use such type of VM because on the other VM for which a lot of stuff is already pre-installed are mounted with "noexec" flag.

VLAZ
  • 26,331
  • 9
  • 49
  • 67
Dr. Fabien Tarrade
  • 1,556
  • 6
  • 23
  • 49

3 Answers3

5

The Snap package contains docker-credential-gcloud in /snap/google-cloud-sdk/current/bin/. You can symlink it to /usr/local/bin using:

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

After that, pushing Docker images to Google Container Registry (gcr.io) works fine.

I also tried sudo snap alias google-cloud-sdk.docker-credential-gcloud docker-credential-gcloud to create a symlink similar to the one for gcloud itself. But that failed with the following error:

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)
Falko Menge
  • 788
  • 7
  • 16
2

Here is what is now working (thanks Google for the help)

Setup:

  • Choose Ubuntu 18.10 (GNU/Linux 4.18.0-1005-gcp x86_64)
    add 20 GB disk + allow http and http
    set access for each API -> Storage : Read Write
  • sudo snap remove google-cloud-sdk
  • curl https://sdk.cloud.google.com | bash
  • reconnect to the VM
  • install docker https://docs.docker.com/install/linux/docker-ce/ubuntu/
    sudo apt-get remove docker docker-engine docker.io containerd runc
    sudo apt-get update
    sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
    curl -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) \
    stable"
    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io
    sudo docker run hello-world # test
  • sudo usermod -a -G docker LOGIN
  • reconnect to the VM
  • gcloud auth configure-docker

testing docker pull/push on GCP

  • docker pull tensorflow/serving
  • docker tag tensorflow/serving gcr.io/BUCKET_NAME/tf-serving
  • docker push gcr.io/BUCKET_NAME/tf-serving
    (if you don't give write access when creating the VM: use "gcloud auth login")

now this works

Dr. Fabien Tarrade
  • 1,556
  • 6
  • 23
  • 49
0

the issue might be that snap install; just remove /snap/google-cloud-sdk from the system. or check which gcloud to see which one is even used. the apt version does not seem to have these docker packages available - and also, the $PATH only lists that snap version.

ordinary, components can be updated with:

gcloud components update

or listed:

gcloud components list

or installed:

gcloud components install docker-credential-gcr 

would suggest to simply install the stand-alone version with:

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

after having removed the snap and apt version, from file-system and $PATH.

Martin Zeitler
  • 1
  • 19
  • 155
  • 216
  • gcloud seems to be there: 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" I cannot update or install components: "ERROR: (gcloud.components.install) You cannot perform this action because this Cloud SDK installation is managed by an external package manager." – Dr. Fabien Tarrade Feb 02 '19 at 16:04
  • `sudo apt-get remove google-cloud-sdk && sudo snap remove google-cloud-sdk` should remove both, then the standalone version can be freshly installed - and adding components should work. the standalone version is indeed less problematic; also had issues with the package-manager version on CentOS - because it always tries to update itself, while it is not permitted to - as well as, that only packaged components can be installed. – Martin Zeitler Feb 02 '19 at 16:09
  • I will retry from scratch. I managed to install the version manually and I see gcloud using the new version: Google Cloud SDK [232.0.0] I still have the Warning with the path and I still cannot push the image. I will try again and use your options above to remove google-cloud-sdk, maybe I didn't clean the path properly. Thanks – Dr. Fabien Tarrade Feb 02 '19 at 16:22
  • with your recipies, I managed to have a clean install of gcloud. No Warning anymore with "gcloud auth configure-docker" but still the same issue to push the image in GCP Container Repository. Which API or access right are needed for my bucket ? – Dr. Fabien Tarrade Feb 02 '19 at 16:54