Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.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
C# VSTS无法生成docker映像_C#_Docker_Visual Studio 2017_Docker Compose_Azure Devops - Fatal编程技术网

C# VSTS无法生成docker映像

C# VSTS无法生成docker映像,c#,docker,visual-studio-2017,docker-compose,azure-devops,C#,Docker,Visual Studio 2017,Docker Compose,Azure Devops,我有一个简单的现成的VS2017 web api,我正在尝试在VST上为其构建Docker映像,并将该映像发布到Azure容器注册表。但它不工作,错误如下: 2018-05-21T16:49:45.8481201Z Step 7/17 : COPY WebApi/WebApi.csproj WebApi/ 2018-05-21T16:49:45.8503445Z COPY failed: stat /var/lib/docker/tmp/docker-builder936381234/WebAp

我有一个简单的现成的VS2017 web api,我正在尝试在VST上为其构建Docker映像,并将该映像发布到Azure容器注册表。但它不工作,错误如下:

2018-05-21T16:49:45.8481201Z Step 7/17 : COPY WebApi/WebApi.csproj WebApi/
2018-05-21T16:49:45.8503445Z COPY failed: stat /var/lib/docker/tmp/docker-builder936381234/WebApi/WebApi.csproj: no such file or directory
2018-05-21T16:49:45.8644972Z ##[error]COPY failed: stat /var/lib/docker/tmp/docker-builder936381234/WebApi/WebApi.csproj: no such file or directory
2018-05-21T16:49:45.8732546Z ##[error]/usr/local/bin/docker failed with return code: 1
这是标准的VS2017解决方案

Dockerfile

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 63537
EXPOSE 44369

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY WebApi/WebApi.csproj WebApi/
RUN dotnet restore WebApi/WebApi.csproj
COPY . .
WORKDIR /src/WebApi
RUN dotnet build WebApi.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish WebApi.csproj -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "WebApi.dll"]
dockerignore先生

.dockerignore
.env
.git
.gitignore
.vs
.vscode
docker-compose.yml
docker-compose.*.yml
*/bin
*/obj
docker-compose.yml

version: '3.4'

services:
  webapi:
    image: webapi
    build:
      context: .
      dockerfile: WebApi/Dockerfile

我通过更改.dockerginore文件、删除文件等尝试了所有建议的解决方案。

复制文件是基于生成上下文的,默认情况下,Docker任务选中了使用默认生成上下文选项,您需要取消选中此选项并指定相应的路径(相同级别的解决方案),例如根文件夹的

您的撰写文件中的
上下文应为-
context:./WebApi


正如在其他回答中提到的那样,Docker build将目录作为构建映像所需内容的根目录。

我使用的是Docker,而不是build tasks Agent中的Docker Compose任务。更改为Docker Compose并指向Docker Compose文件可以解决问题。

我的问题是位于子目录中的不必要的Dockerfile


由于VSTS在默认情况下使用
**/Dockerfile
搜索Dockerfile,因此使用了此不必要的Dockerfile,导致了错误的上下文。正确的Dockerfile被忽略。

我在Visual Studio 2019上遇到了相同的问题。这就是我解决问题的原因:

  • 删除Dockerfile;如果您进行了任何自定义,请将其复制到某个位置
  • 右键单击项目->添加->Docker支持,这将生成一个新的Docker文件。将自定义内容复制回
  • 右键单击项目->编辑项目文件
  • 找到此行
    ,然后将其删除

  • COPY WebApi/WebApi.csproj WebApi/
    失败,因为
    WebApi/WebApi.csproj
    不存在,所以请检查为什么名称配置在本地工作。请注意,将dockerfile放置在哪个文件夹中,或者分别在哪个文件夹中调用
    docker build
    命令很重要。docker将对此文件夹进行快照(和所有子文件夹)并将其转发给docker deamon进行处理。也就是说,docker文件中的路径必须与调用
    docker build
    命令的位置相对。@Chirdeptomar您解决了这个问题吗?@starianchen MSFT是的,使用build tasks代理中的docker Compose任务。这解决了我的问题。我不确定它们默认的构建上下文是什么但却导致它不在路径上。谢谢。哥们!!这节省了我几个小时,因为我是一个Azure/容器noob。非常感谢!!!我刚刚完成了第4步,这解决了我的问题。谢谢队长