1
votes

I would like to use Google Cloud SDK with Django project in Docker container. Let's assume that I would like to use

from google.cloud import vision
from google.cloud.vision import types

When I install google-cloud using requirements.txt file I get error shown below. On my local machine without container it works properly. Does anyone have an idea how can I solve this?

django_1 | oauth2client.client.ApplicationDefaultCredentialsError: The Application Default Credentials are not available. They are available if running in Google Compute Engine. Otherwise, the environment variable GOOGLE_APPLICATION_CREDENTIALS must be defined pointing to a file defining the credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.

UPDATE I work on MacBook and I found on this website this:

docker run --rm -it -v ~/.config/gcloud:/.config/gcloud google/cloud-sdk

At this moment I get errors shown below. Any ideas how can I solve this?

django_1  | Traceback (most recent call last):
django_1  |   File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
django_1  |     response = get_response(request)
django_1  |   File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
django_1  |     response = self.process_exception_by_middleware(e, request)
django_1  |   File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
django_1  |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
django_1  |   File "/usr/local/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
django_1  |     return view_func(*args, **kwargs)
django_1  |   File "/usr/local/lib/python3.6/site-packages/django/views/generic/base.py", line 68, in view
django_1  |     return self.dispatch(request, *args, **kwargs)
django_1  |   File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 489, in dispatch
django_1  |     response = self.handle_exception(exc)
django_1  |   File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 449, in handle_exception
django_1  |     self.raise_uncaught_exception(exc)
django_1  |   File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 486, in dispatch
django_1  |     response = handler(request, *args, **kwargs)
django_1  |   File "/code/backend/views.py", line 23, in get
django_1  |     client = vision.ImageAnnotatorClient()
django_1  |   File "/usr/local/lib/python3.6/site-packages/google/cloud/gapic/vision/v1/image_annotator_client.py", line 147, in __init__
django_1  |     ssl_credentials=ssl_credentials)
django_1  |   File "/usr/local/lib/python3.6/site-packages/google/gax/grpc.py", line 106, in create_stub
django_1  |     credentials = _grpc_google_auth.get_default_credentials(scopes)
django_1  |   File "/usr/local/lib/python3.6/site-packages/google/gax/_grpc_google_auth.py", line 62, in get_default_credentials
django_1  |     credentials, _ = google.auth.default(scopes=scopes)
django_1  |   File "/usr/local/lib/python3.6/site-packages/google/auth/_default.py", line 282, in default
django_1  |     raise exceptions.DefaultCredentialsError(_HELP_MESSAGE)
django_1  | google.auth.exceptions.DefaultCredentialsError: Could not automatically determine credentials. Please set GOOGLE_APPLICATION_CREDENTIALS or
django_1  | explicitly create credential and re-run the application. For more
django_1  | information, please see
django_1  | https://developers.google.com/accounts/docs/application-default-credentials.
1
Try this docker run -e "GOOGLE_APPLICATION_CREDENTIALS=$GOOGLE_APPLICATION_CREDENTIALS" --rm -it -v ~/.config/gcloud:/.config/gcloud google/cloud-sdk - Tarun Lalwani
@TarunLalwani After using your command there is root@4271b8a28802:/# and still the same error. - user7304253
can you run env on your mac and post all google related environment variables? Make any value that need to be private replaced by dummy value. - Tarun Lalwani
@TarunLalwani Did you mean information that I added to the updated question? - user7304253

1 Answers

0
votes

The issue is the you are mounting the folder to / instead of /root/ where the config will be checked for

change

docker run --rm -it -v ~/.config/gcloud:/.config/gcloud google/cloud-sdk

to

docker run --rm -it -v ~/.config/gcloud:/root/.config/gcloud google/cloud-sdk

If you are use docker-compose then add it to the yaml of the particular server

volumes:
  - ~/.config/gcloud:/root/.config/gcloud