如何在没有Visual Studio且没有docker compose的情况下使用docker复制csproj文件?

时间:2018-10-29 16:20:33

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

我刚刚使用Visual Studio 15.8.8通过.NET Core项目(2.1)开始了新的解决方案。通过将docker compose文件设置为启动项目,它可以运行和调试它。可行!

从逻辑上讲,我应该能够使用简单的命令行语句构建docker映像。但是,它抱怨找不到csproj。这很奇怪。该文件存在,并且正如我所告诉的,我可以从Visual Studio中运行它。我从一个目录和具有dockerfile的目录尝试了它。同样的问题。

我该如何解决?我唯一想要的就是简单地构建映像,然后仅使用docker命令运行它。

Screenshot of commandline

Commandline with directory itself Dockerfile

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

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["TryNewDocker2/TryNewDocker2.csproj", "TryNewDocker2/"]
RUN dotnet restore "TryNewDocker2/TryNewDocker2.csproj"
COPY . .
WORKDIR "/src/TryNewDocker2"
RUN dotnet build "TryNewDocker2.csproj" -c Release -o /app

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

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

Het是撰写文件:

version: '3.4'

services:
  trynewdocker2:
    image: ${DOCKER_REGISTRY}trynewdocker2
    build:
      context: .
      dockerfile: TryNewDocker2/Dockerfile

从逻辑上讲,我希望“ docker-compose up”在解决此问题时能够继续工作。

2 个答案:

答案 0 :(得分:3)

这是由dockerfile中文件路径的错误根文件夹引起的。

要从Docker启动,其根文件夹为C:\Users\...\repos\TryNewDocker2,但从command运行时,其根目录为C:\Users\...\repos\TryNewDocker2\TryNewDocker2,因此{{1}的路径}已从TryNewDocker2.csproj更改为TryNewDocker2/TryNewDocker2.csproj

在下面尝试dockerfile:

TryNewDocker2.csproj

更新

要同时使用Docker和命令,请不要更改dockerfile,并且从下面的路径运行并指定dockerfile路径来运行命令。

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 59162
EXPOSE 44342

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["TryNewDocker2.csproj", "TryNewDocker2/"]
RUN dotnet restore "TryNewDocker2/TryNewDocker2.csproj"
COPY . ./TryNewDocker2/
WORKDIR "/src/TryNewDocker2"
RUN dotnet build "TryNewDocker2.csproj" -c Release -o /app

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

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

答案 1 :(得分:0)

对于像我一样多年后来到这里的你们,我将分享我的经验。

我的问题是由Visual Studio的“添加> Docker支持...”自动生成的Dockerfile与我的.csproj文件处于同一级别引起的。

引起我麻烦的特定行是COPY ["MyApp/MyApp.csproj", "MyApp/"],应该只是COPY ["MyApp.csproj", "MyApp/"]。删除.csproj前面多余的MyApp/可使构建正常运行。

特别感谢爱德华在上面的回答中指出的正确方向。