Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有visual studio和docker compose的情况下使用docker复制csproj文件?_Docker_Asp.net Core_.net Core_Dockerfile - Fatal编程技术网

如何在没有visual studio和docker compose的情况下使用docker复制csproj文件?

如何在没有visual studio和docker compose的情况下使用docker复制csproj文件?,docker,asp.net-core,.net-core,dockerfile,Docker,Asp.net Core,.net Core,Dockerfile,我刚刚使用VisualStudio15.8.8启动了一个带有.NET核心项目(2.1)的新解决方案。它可以通过将docker compose文件设置为启动项目来运行和调试它。它起作用了 从逻辑上讲,我应该能够用一个简单的命令行语句构建docker映像。然而,它抱怨说,找不到csproj。这很奇怪。该文件存在,正如我所说,我可以从VisualStudio运行它。我从上面的一个目录和包含dockerfile的目录中尝试了它。同样的问题 我怎样才能解决这个问题?我唯一想要的就是构建我的映像,然后使用d

我刚刚使用VisualStudio15.8.8启动了一个带有.NET核心项目(2.1)的新解决方案。它可以通过将docker compose文件设置为启动项目来运行和调试它。它起作用了

从逻辑上讲,我应该能够用一个简单的命令行语句构建docker映像。然而,它抱怨说,找不到csproj。这很奇怪。该文件存在,正如我所说,我可以从VisualStudio运行它。我从上面的一个目录和包含dockerfile的目录中尝试了它。同样的问题

我怎样才能解决这个问题?我唯一想要的就是构建我的映像,然后使用docker命令运行它

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”在修复此问题时继续工作。

这是由于dockerfile中文件路径的根文件夹错误造成的

Docker
启动时,其根文件夹为
C:\Users\…\repos\TryNewDocker2
,但从
命令运行时,其根文件夹为
C:\Users\…\repos\TryNewDocker2\TryNewDocker2
,因此
TryNewDocker2.csproj
的路径已从
TryNewDocker2/TryNewDocker2.csproj
更改为
TryNewDocker2.csproj

请尝试下面的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"]
更新

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

C:\Users\...\repos\TryNewDocker2>docker build -t gogo -f TryNewDocker2/Dockerfile .

对于那些像我一样多年后来到这里的人,我将分享我的经验

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

给我带来麻烦的具体行是
COPY[“MyApp/MyApp.csproj”,“MyApp/”]
,它应该是
COPY[“MyApp.csproj”,“MyApp/”]
。删除.csproj前面额外的
MyApp/
,构建工作正常


特别感谢Edward在上面的回答中为我指出了正确的方向。

编辑问题,将您的
Dockerfile
包括在内。刚刚在帖子中完成。我认为在执行
dotnet发布之前,没有必要进行
dotnet构建
,构建应该是隐含的。@Matthew您确实有道理,但这只是自动生成的dockerfile。首先,我想让它工作(这应该很容易,因为它是默认的)。那我想让它变得更好。谢谢。这是可行的,但它带来了一个新问题。“docker compose up”给出了一个错误:“错误:服务'trynewdocker2'构建失败:复制失败:stat/var/lib/docker/tmp/docker-builder986714315/trynewdocker2.csproj:没有这样的文件或目录”。它是一个使用visual studio创建的标准.NET核心项目,在解决方案文件夹中有一个compose文件,在项目文件夹中有一个docker文件。