Azure管道从容器注册表构建Docker映像
我有一个Dockerfile的基本映像,它位于Azure容器注册表中。当我在本地运行Docker时会生成映像,但当我尝试在Azure管道中运行它时,它会在Get上失败:“未经授权:需要身份验证”。但是,我已经在我的DevOps项目上创建了一个服务连接(并使其可用于所有管道),并根据使用了它 这是我的dockerfile:Azure管道从容器注册表构建Docker映像,docker,azure-devops,azure-pipelines,azure-container-registry,Docker,Azure Devops,Azure Pipelines,Azure Container Registry,我有一个Dockerfile的基本映像,它位于Azure容器注册表中。当我在本地运行Docker时会生成映像,但当我尝试在Azure管道中运行它时,它会在Get上失败:“未经授权:需要身份验证”。但是,我已经在我的DevOps项目上创建了一个服务连接(并使其可用于所有管道),并根据使用了它 这是我的dockerfile: FROM myregistry.azurecr.io/bases/netcorenodebase:v1.0 AS base WORKDIR /app EXPOSE 80 F
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,效果也一样。我如何才能让它工作?以下是我一直在使用的:
- task: Docker@1
inputs:
containerregistrytype: 'Container Registry'
dockerRegistryEndpoint: registryName
imageName: imageName
includeLatestTag: true
dockerFile: path_to_file
- task: Docker@1
inputs:
containerregistrytype: 'Container Registry'
dockerRegistryEndpoint: registryName
imageName: imageName
command: push
您不必登录\注销,docker step会为您这样做以下是我一直在使用的:
- task: Docker@1
inputs:
containerregistrytype: 'Container Registry'
dockerRegistryEndpoint: registryName
imageName: imageName
includeLatestTag: true
dockerFile: path_to_file
- task: Docker@1
inputs:
containerregistrytype: 'Container Registry'
dockerRegistryEndpoint: registryName
imageName: imageName
command: push
您不必登录\注销,docker step会为您这样做docker如何知道需要与哪个用户进行身份验证?因为我们没有在任何地方传递任何凭据?您有办法指定任务中使用的服务连接docker如何知道需要与哪个用户进行身份验证?因为我们没有在任何地方传递任何凭据?您可以指定任务中使用的服务连接