Доступ контейнера к учетным данным gcloud запрещен

Я пытаюсь реализовать контейнер, который преобразует данные из HL7 в FHIR (https://github.com/GoogleCloudPlatform/healthcare/tree/master/ehr/hl7/message_converter/java) в Google Cloud. Однако я не могу создать контейнер локально на своем компьютере, чтобы позже развернуть его в облаке.

Возникающая ошибка всегда возникает в части аутентификации учетных данных, когда я пытаюсь локально повернуть изображение с помощью докера:

docker run --network=host -v ~/.config:/root/.config hl7v2_to_fhir_converter 
/healthcare/bin/healthcare --fhirProjectId=<PROJECT_ID> --fhirLocationId=<LOCATION_ID> -- 
fhirDatasetId=<DATASET_ID> --fhirStoreId=<STORE_ID> --pubsubProjectId=<PUBSUB_PROJECT_ID> -- 
pubsubSubscription=<PUBSUB_SUBSCRIPTION_ID> --apiAddrPrefix=<API_ADDR_PREFIX>

Я использую Windows и уже выполнил приведенную ниже команду для создания учетных данных:

gcloud auth application-default login

Учетные данные после выполнения вышеуказанной команды сохраняются в:

C:\Users\XXXXXX\AppData\Roaming\gcloud\application_default_credentials.json

Команда -v ~ / .config: /root/.config должна позволить докеру искать учетные данные при запуске образа, но это не так. Возникающая ошибка:

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.

Что я ставлю ошибку?

Спасибо,

1) Ваше предположение о is supposed to enable the docker to search неверно. Приложения-контейнеры не могут выполнять поиск в среде хоста. Google ADC проверяет только известные местоположения, и указанный вами путь не является одним из них. 2) НЕ ссылайтесь на файлы учетных данных, созданные CLI gcloud. Укажите файл JSON учетной записи службы из вашего каталога, а не файл, управляемый CLI.

John Hanley 12.12.2020 12:44

3) Используйте синтаксис монтирования контейнера (-v), чтобы указать файл учетной записи службы. Затем установите переменную среды GOOGLE_APPLICATION_CREDENTIALS (-e) при запуске контейнера, чтобы сообщить ему, где находятся учетные данные.

John Hanley 12.12.2020 12:44

Спасибо вам за помощь!!

LuisBerga 14.12.2020 21:22
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
1 477
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Таким образом, вся конфигурация в вашей среде будет недействительной, если вы не передадите ее в среду выполнения контейнера, например переменную окружения GOOGLE_APPLICATION_CREDENTIALS.

Я написал об этом статью. Дайте мне знать, если это поможет, и, если нет, мы обсудим точку блокировки!

Привет! Спасибо вам за помощь!! Я попробовал следующий код для запуска...

LuisBerga 14.12.2020 21:10
SET ADC = %appdata%/gcloud/application_default_credentials.json
LuisBerga 14.12.2020 21:10
docker run --network=host -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/FILE_NAME.json -v ADC:/tmp/keys/FILE_NAME.json:ro /healthcare/bin/healthcare --fhirProjectId=<PROJECT_ID> --fhirLocationId=<LOCATION_ID> --fhirDatasetId=<DATASET_ID> --fhirStoreId=<STORE_ID> --pubsubProjectId=<PUBSUB_PROJECT_ID> --pubsubSubscription=<PUBSUB_SUBSCRIPTION_ID> --apiAddrPrefix=<API_ADDR_PREFIX>
LuisBerga 14.12.2020 21:11

Но все еще показывает ошибку: java.io.IOException: Error reading credential file from environment variable GOOGLE_APPLICATION_CREDENTIALS, value '/tmp/keys/FILE_NAME.json': File does not exist.

LuisBerga 14.12.2020 21:11

Я поставил только:SET ADC = "%appdata%/gcloud/application_default_credentials.json"

LuisBerga 14.12.2020 21:21

И используя %ADC

LuisBerga 14.12.2020 21:21

Ценю вашу помощь =)

LuisBerga 14.12.2020 21:21

Еще вопрос... В --apiAddrPrefix=<API_ADDR_PREFIX> использую healthcare.googleapis.com/v1. Это верно? Учетные данные в порядке, но я получаю следующую ошибку:

LuisBerga 14.12.2020 21:40
Exception in thread "main" java.lang.NullPointerException at com.google.api.client.http.GenericUrl.<init>(GenericUrl.java‌​:158) at com.google.api.client.http.GenericUrl.<init>(GenericUrl.java‌​:125) at com.google.cloud.healthcare.apiclient.HttpFhirClient.generat‌​eFhirStoreUrl(HttpFh‌​irClient.java:89) at com.google.cloud.healthcare.apiclient.HttpFhirClient.getFhir‌​Store(HttpFhirClient‌​.java:73) at com.google.cloud.healthcare.pubsub.MessageListener.start(Mes‌​sageListener.java:70‌​) at com.google.cloud.healthcare.Hl7V2ToFhirWorker.main(Hl7V2ToFh‌​irWorker.java:117)
LuisBerga 14.12.2020 21:41

Я просто поставил https://healthcare.googleapis.com/v1beta1 и все работает!! Спасибо

LuisBerga 14.12.2020 21:48

Другие вопросы по теме