Docker не удается получить изображение из Azure Службы приложений - PullRequest
1 голос
/ 11 февраля 2020

Настройка контейнера в службе приложений сама по себе solid: enter image description here

Но на панели журнала отображаются ошибки:

enter image description here

2020-02-11 06:31:40.621 ERROR - Image pull failed: Verify docker image configuration and credentials (if using private repository)
2020-02-11 06:31:41.240 INFO  - Stoping site app505-dfpg-qa2-web-eastus2-gateway-apsvc because it failed during startup.
2020-02-11 06:36:05.546 INFO  - Starting container for site
2020-02-11 06:36:05.551 INFO  - docker run -d -p 9621:8081 --name app505-dfpg-qa2-web-eastus2-gateway-apsvc_0_a9c8277e_msiProxy -e WEBSITE_SITE_NAME=app505-dfpg-qa2-web-eastus2-gateway-apsvc -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=app505-dfpg-qa2-web-eastus2-gateway-apsvc.azurewebsites.net -e WEBSITE_INSTANCE_ID=7d18d5957d129d3dc3a25d7a2c85147ef57f1a6b93910c50eb850417ab59dc56 appsvc/msitokenservice:1904260237  

2020-02-11 06:36:05.552 INFO  - Logging is not enabled for this container.
Please use https://aka.ms/linux-diagnostics to enable logging to see container logs here.
2020-02-11 06:36:17.766 INFO  - Pulling image: a...cr/gateway:1.0.20042.2
2020-02-11 06:36:17.922 ERROR - DockerApiException: Docker API responded with status code=NotFound, response={"message":"pull access denied for a...cr/gateway, repository does not exist or may require 'docker login': denied: requested access to the resource is denied"}

2020-02-11 06:36:17.923 ERROR - Pulling docker image a...cr/gateway:1.0.20042.2 failed:
2020-02-11 06:36:17.923 INFO  - Pulling image from Docker hub: a...cr/gateway:1.0.20042.2
2020-02-11 06:36:18.092 ERROR - DockerApiException: Docker API responded with status code=NotFound, response={"message":"pull access denied for a...cr/gateway, repository does not exist or may require 'docker login': denied: requested access to the resource is denied"}

2020-02-11 06:36:18.094 ERROR - Image pull failed: Verify docker image configuration and credentials (if using private repository)
2020-02-11 06:36:19.062 INFO  - Stoping site app505-dfpg-qa2-web-eastus2-gateway-apsvc because it failed during startup.

Принципал службы, используемый для развертывания службы приложений, имеет AcrPu sh доступ к родительской группе ресурсов реестра контейнера: enter image description here

Имеются настройки:

enter image description here

Я сделал az login с этим субъектом службы, а затем попытался az acr login в реестре. Работает нормально. Так чего мне здесь не хватает?

РЕДАКТИРОВАТЬ 1

Я знаю, что учетные данные верны, потому что я проверял их следующим образом: enter image description here

Там, где я просто скопировал значения из конфигурации службы приложения и вставил в консоль. docker не имеет проблем со входом в систему.

Это должно быть что-то еще.

РЕДАКТИРОВАТЬ 2

Однако я также получаю это:

C:\Dayforce\fintech [shelve/terraform ≡]> docker pull a...r/gateway
Using default tag: latest
Error response from daemon: pull access denied for a...r/gateway, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

Итак, я могу войти, но не тянуть. Очень странно, потому что учетная запись настроена на AcrPush доступ к контейнеру, который включает в себя AcrPull: enter image description here

EDIT 3

Мне удалось успешно вытащить при использовании полного доменного имени для реестра: enter image description here

Я обновил конвейер, но все равно получаю те же ошибки:

2020-02-11 16:03:50.227 ERROR - Pulling docker image a...r.azurecr.io/gateway:1.0.20042.2 failed:
2020-02-11 16:03:50.228 INFO  - Pulling image from Docker hub: a...r.azurecr.io/gateway:1.0.20042.2
2020-02-11 16:03:50.266 ERROR - DockerApiException: Docker API responded with status code=InternalServerError, response={"message":"Get https://a...r.azurecr.io/v2/gateway/manifests/1.0.20042.2: unauthorized: authentication required"}

2020-02-11 16:03:50.269 ERROR - Image pull failed: Verify docker image configuration and credentials (if using private repository)
2020-02-11 16:03:50.853 INFO  - Stoping site app505-dfpg-qa2-web-eastus2-gateway-apsvc because it failed during startup.

РЕДАКТИРОВАТЬ 4

Единственный способ, с помощью которого я нашел работу, - это включить пользователя-администратора в ACR и передать его учетные данные в переменные DOCKER _... вместо учетных данных Принципал службы.

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

РЕДАКТИРОВАТЬ 5

Весь процесс выполняется как часть конвейера Azure DevOps для предварительного выпуска с использованием выделенного участника службы. Позвольте мне назвать его Pod Deploy Service Principal или просто SP для краткости.

Позвольте DOCKER_xyz обозначить три настройки приложения, управляющие docker, работающими на хосте службы приложений:

  • DOCKER_REGISTRY_SERVER_URL
  • DOCKER_REGISTRY_SERVER_USERNAME
  • DOCKER_REGISTRY_SERVER_PASSWORD

Я думаю, что мы должны различать guish две части здесь:

  1. Службе приложений необходимо связаться с ACR, чтобы извлечь из него сведения об изображении и представить их в этом GUI - enter image description here. для работы SP должен иметь роль AcrPull в ACR. В противном случае GUI представляет вращающийся значок для строк изображения и тега. Я наткнулся на него раньше - Как настроить службу приложения Azure для извлечения изображений из ACR с помощью terraform? Теперь ответ на этот вопрос предполагает, что мне нужно назначить роль AcrPull и установить настройки приложения DOCKER_xyz. Я думаю, что настройки приложения DOCKER_xyz не для этого, а для второй части.
  2. Мне кажется, что при запуске службы приложений хост использует docker, чтобы фактически получить нужное изображение от ACR. Эта часть, кажется, отделена от (1). Чтобы это работало, настройки приложения должны иметь настройки приложения DOCKER_xyz.

Моя проблема в том, что part (1) работает отлично, а часть (2) - нет, даже если DOCKER_xyz app В настройках указываются учетные данные ИП из части (1). Единственный способ заставить его работать, если я указываю DOCKER_xyz на пользователя-администратора ACR.

Но именно поэтому настройки приложения DOCKER_xyz на Земле не могут указывать на конвейер SP, что было достаточно хорошо для части (1)?

1 Ответ

0 голосов
/ 12 февраля 2020

Из сообщения, которое я получил в своем выступлении, позвольте мне решить вашу загадку об ошибке.

Я полагаю, вы развернули изображение в ACR в веб-приложении через портал Azure. Когда вы используете портал Azure для развертывания веб-приложения из ACR, он только позволяет вам выбрать ACR, изображение и тег, но не позволяет устанавливать учетные данные. Таким образом, Azure сам установит его с именем пользователя и паролем администратора, если вы включите пользователя с правами администратора. Если вы не включите его, возникнет ошибка.

И если вы хотите использовать субъект службы, я рекомендую использовать другие инструменты, такие как Azure CLI. Затем вы можете установить учетные данные реестра docker самостоятельно с помощью команды az webapp config container set.

Вот пример, и он отлично работает на моей стороне:

enter image description here

С помощью Azure CLI вы можете выполнить шаги здесь .

Обновление:

Вот скриншоты теста на моей стороне:

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...