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-sdkTarun 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