ASP.NET Core Dockerfile默认模板:" COPY * .sln ./"没有指定源文件

时间:2018-02-27 20:39:17

标签: visual-studio docker asp.net-core dockerfile

我使用Visual Studio默认模板创建了一个标准的ASP.NET核心Web应用程序,并添加了Docker支持。这将创建以下文件/文件夹结构

+ Test01
    +Test01
        -All project files
        -Dockerfile
    -Test01.sln
    -docker-compose.xxx files
    -.dockerignore

Dockerfile由VS创建,如下所示:

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY *.sln ./
COPY Test01/Test01.csproj Test01/
RUN dotnet restore
COPY . .
WORKDIR /src/Test01
RUN dotnet build -c Release -o /app

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

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

现在,当我使用Docker CLI基于项目文件夹中的Dockerfile构建映像时:

cd -to project folder-
docker build -t test01 . 

我收到以下错误:

Step 6/17 : COPY *.sln ./
No source files were specified

显然会发生这种情况,因为Dockerfile位于项目文件夹(/ Test01 / Test01)中,而.sln文件位于父文件夹(/ Test01)中。

我不明白为什么默认的Dockerfile是这样设置的?为什么Dockerfile不在Solution文件夹而不是项目文件夹中?如果以这种方式从CLI构建,不仅.sln文件不可访问,而且.dockerignore和docker-compose文件也在父文件夹中?

我错过了什么?

1 个答案:

答案 0 :(得分:3)

您应该在解决方案文件夹中运行docker build,而不是在项目文件夹中运行docker-compose build。但这需要安装docker-compose

编辑:您可以使用docker撰写很多很酷的东西。例如,您可以在docker-compose.yml中包含所有容器/信息并运行docker-compose up -d。这将构建您的图像,下载任何repo图像,部署容器,并将它们置于分离模式! (reference