我有一个简单的开箱即用VS2017 web api,我正在尝试在VSTS上构建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
搬运工-compose.yml
version: '3.4'
services:
webapi:
image: webapi
build:
context: .
dockerfile: WebApi/Dockerfile
我通过更改.dockerignore文件,删除它等等尝试了所有建议的解决方案。
答案 0 :(得分:7)
它基于构建上下文来复制文件,默认情况下,使用默认构建上下文选项检查 Docker 任务,您需要取消选中此选项并且指定相应的路径(相同级别的解决方案),例如根文件夹.
。
答案 1 :(得分:0)
撰写文件中的context
应为 -
context: ./WebApi
正如其他答案中所提到的,Docker构建将目录作为context
,这是构建映像所需的内容的根目录。
答案 2 :(得分:0)
我使用Docker而不是构建任务代理的Docker Compose任务。改为Docker Compose并指向Docker撰写文件就可以了。
答案 3 :(得分:0)
我的问题是我有一个不必要的Dockerfile位于子目录中。
由于VSTS默认情况下使用**/Dockerfile
搜索Dockerfile,因此使用了此不必要的Dockerfile,从而导致错误的上下文。正确的Dockerfile被忽略。
答案 4 :(得分:0)
我在Visual Studio 2019上遇到了同样的问题。这就是为我解决的问题:
var bedwarsCoins = player.stats.Bedwars.coins
并将其删除。