Docker撰写构建副本失败

时间:2019-08-20 11:47:16

标签: docker asp.net-core asp.net-web-api docker-compose dockerfile

我真的很好奇如何解释和调试以下错误:-

class TaskType(Base):
    name = models.CharField(max_length=50)


class Task(Base):
    ...
    # initially there was only one parameter - TaskType
    types = models.ManyToManyField(TaskType, blank=True)
    ...

这是一种特殊的微服务,因为我几乎没有这样的服务。

docker文件:-

C:\users\project>docker-compose build 

Step 6/15 : COPY *.csproj ./
ERROR: Service 'invoiceservice' failed to build: COPY failed: no source files were specified

有趣的是,当我从Visual Studio IDE构建它时,它可以很好地构建,但不能在CLI上构建。

docker撰写文件:-

FROM mcr.microsoft.com/dotnet/core/runtime:2.2 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /src
COPY *.csproj ./
RUN dotnet restore -s https://api.nuget.org/v3/index.json -s https://www.myget.org/F/autoweb/api/v3/index.json

COPY . .
WORKDIR /src/src/InvoiceManagement/InvoiceService
RUN dotnet publish -c Release -o out

FROM build AS publish

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

我不明白为什么CLI无法找到源位置并复制到VS可以正常工作的位置。有任何线索吗?

2 个答案:

答案 0 :(得分:3)

您的Docker上下文可能有问题。 Dockerfile中的命令是相对于运行docker / docker-compose CLI工具的 ,而不是相对于Dockerfile的位置。

换句话说,如果您从解决方案根目录运行命令,则您的csproj文件实际上位于./src/InvoiceManagement/InvoiceService下。结果,*.csproj找不到文件,因为在解决方案根目录中根本没有项目文件。

答案 1 :(得分:0)

我尝试复制您的问题,并且能够成功复制所有文件(而不是.csproj,而是使用.txt)。没有txt文件要复制时发生问题。我的COPY命令失败,并显示与您完全相同的消息。

现在,为什么VS能够成功构建映像?那是因为VS首先构建项目!项目的构建过程完成后,将生成一个.csproj文件,并将其复制到映像中。

要确认结果,请ls当前目录(从命令行构建失败时),并查看该目录中是否有任何.csproj文件。

相关问题