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