Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure管道从容器注册表构建Docker映像_Docker_Azure Devops_Azure Pipelines_Azure Container Registry - Fatal编程技术网

Azure管道从容器注册表构建Docker映像

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

我有一个Dockerfile的基本映像,它位于Azure容器注册表中。当我在本地运行Docker时会生成映像,但当我尝试在Azure管道中运行它时,它会在Get上失败:“未经授权:需要身份验证”。但是,我已经在我的DevOps项目上创建了一个服务连接(并使其可用于所有管道),并根据使用了它

这是我的dockerfile:

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如何知道需要与哪个用户进行身份验证?因为我们没有在任何地方传递任何凭据?您可以指定任务中使用的服务连接