У меня есть базовый образ для моего Dockerfile, который находится в реестре контейнеров Azure. Образ создается, когда я запускаю Docker локально, но когда я пытаюсь запустить его в конвейерах Azure, происходит сбой при получении: «неавторизовано: требуется проверка подлинности». Однако я создал Service Connection в своем проекте DevOps (и сделал его доступным для всех конвейеров) и использовал его в соответствии с документами .
Вот мой докер-файл:
FROM myregistry.azurecr.io/bases/netcorenodebase:v1.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY ["MyApp/MyApp.csproj", "MyApp/"]
RUN dotnet restore "MyApp/MyApp.csproj"
COPY . .
WORKDIR "/src/MyApp"
RUN dotnet build "MyApp.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "MyApp.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "MyApp.dll"]
Трубопроводы YAML:
pool:
name: Hosted Ubuntu 1604
variables:
buildConfiguration: 'Release'
steps:
- task: Docker@2
displayName: Login to ACR
inputs:
command: login
containerRegistry: $(dockerServiceConnectionName)
- task: Docker@2
displayName: Build
inputs:
command: build
containerRegistry: $(dockerServiceConnectionName)
repository: myrepo/myimage
tags: |
$(Build.BuildId)
latest
- task: Docker@2
displayName: Push
inputs:
command: push
containerRegistry: $(dockerServiceConnectionName)
repository: myrepo/myimage
tags: |
$(Build.BuildId)
latest
- task: Docker@2
displayName: Logout of ACR
inputs:
command: logout
containerRegistry: $(dockerServiceConnectionName)
Переменная dockerServiceConnectionName установлена в имя служебного соединения и успешно выполняется на этапе входа в систему. Но кажется, что контекст не передается демону Docker, поэтому он не может получить доступ к ACR. Я пробовал с buildAndPush тоже и тот же эффект. Как я могу заставить это работать?