Как авторизовать Google API внутри Docker

# #docker #google-bigquery #google-api

Вопрос:

Я запускаю приложение внутри Docker, которое требует, чтобы я использовал google-bigquery. Когда я запускаю его за пределами Docker, мне просто нужно перейти по ссылке ниже (отредактировано) и авторизоваться. Однако ссылка не работает, когда я копирую-вставляю ее из терминала Docker. Я также пробовал сопоставление портов, но тоже безуспешно.

Код:

 credentials = service_account.Credentials.from_service_account_file(
    key_path, scopes=["https://www.googleapis.com/auth/cloud-platform"],
)
# Make clients.
client = bigquery.Client(credentials=credentials, project=credentials.project_id,)
 

Ответ:
requests_oauthlib.oauth2_session - DEBUG - Generated new state
Please visit this URL to authorize this application:

Ответ №1:

Пожалуйста, ознакомьтесь с доступными решениями на этой странице, она постоянно обновляется.

  • помощник по учетным данным gcloud
  • Автономный помощник по проверке учетных данных Docker
  • Маркер доступа
  • Ключ учетной записи службы

Короче говоря, вам нужно использовать файл ключа учетной записи службы. Убедитесь, что вы либо используете Секретный менеджер, либо просто выдаете файл ключа учетной записи службы для создания образа Docker.

Вам необходимо поместить файл ключа учетной записи службы в контейнер Docker либо во время сборки, либо во время выполнения.

Комментарии:

1. У меня есть ключ учетной записи службы. Просто, когда я нажимаю на эту ссылку в ответе выше, она приводит меня на эту страницу, которая не работает . Возможно, это не проблема с докером, потому что сейчас я получаю его на локальном компьютере. Обычно это срабатывает в первый раз, но не в последующие.

2. Там не должно быть ссылки, если у вас есть ссылка, это означает, что ЧЕЛОВЕК должен авторизовать что-то как OAuth. Файл ключа учетной записи службы можно добавить в код, и он работает правильно. Пересмотрите свой код, так как вы можете использовать его неправильно.

3. Интересный. Я обычно запускаю его в блокноте Jupyter, который автоматически приводит меня на сайт и аутентифицируется (если я вошел в систему), но это из контейнера Docker. Очень странно. Спасибо.