我真的很好奇如何解释和调试以下错误:-
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可以正常工作的位置。有任何线索吗?
答案 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
文件。