尝试从 Docker 中的 VS 运行时出现错误“getcwd() failed: No such file or directory”

Mat*_*ves 8 visual-studio docker docker-compose asp.net-core

我有一个项目设置为使用 docker-compose 在 Docker 中本地运行。直到最近,它一直运行良好。我不相信我改变了任何应该影响这个的东西(除了可能是 VS 升级?),我什至尝试回滚到较旧的提交。在所有情况下,我现在都会收到一条错误消息,它在 Visual Studio 的输出窗口中显示为:

docker exec -i f93fb2962a1e sh -c ""dotnet"  --additionalProbingPath /root/.nuget/packages --additionalProbingPath /root/.nuget/fallbackpackages  "bin/Debug/netcoreapp3.1/MattsTwitchBot.Web.dll" | tee /dev/console"
sh: 0: getcwd() failed: No such file or directory
  It was not possible to find any installed .NET Core SDKs
  Did you mean to run .NET Core SDK commands? Install a .NET Core SDK from:
      https://aka.ms/dotnet-download
Run Code Online (Sandbox Code Playgroud)

我尝试了各种不同的方法(更改 Docker 文件中的基本映像、删除旧映像和容器等),但我一直收到相同的错误消息。奇怪的是,当我执行 File->New 时,Visual Studio 会生成一个外观非常相似的 Docker 文件,并且运行良好。我不知道问题是什么,但我希望这里有人能发现它。

我的完整 repo 可以在 Github 上找到。这是 asp.net 核心项目的 docker:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["MattsTwitchBot.Web/MattsTwitchBot.Web.csproj", "MattsTwitchBot.Web/"]
COPY ["MattsTwitchBot.Core/MattsTwitchBot.Core.csproj", "MattsTwitchBot.Core/"]
RUN dotnet restore "MattsTwitchBot.Web/MattsTwitchBot.Web.csproj"
COPY . .
WORKDIR "/src/MattsTwitchBot.Web"
RUN dotnet build "MattsTwitchBot.Web.csproj" -c Release -o /app/build

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MattsTwitchBot.Web.dll"]
Run Code Online (Sandbox Code Playgroud)

和解决方案的 docker-compose (即使没有 Couchbase 的东西,我也遇到了同样的错误,但为了完整起见,我将它粘贴在这里):

version: '3.4'

services:
  couchbase:
    image: couchbase:6.5.0-beta2
    volumes:
    - "./couchbasetwitchbot:/opt/couchbase/var" # couchbase data folder
    ports:
    - "8091-8096:8091-8096" # https://docs.couchbase.com/server/current/install/install-ports.html
    - "11210-11211:11210-11211"
  mattstwitchbot.web:
    image: ${DOCKER_REGISTRY-}mattstwitchbotweb
    build:
      context: .
      dockerfile: MattsTwitchBot.Web/Dockerfile
    environment:
      Couchbase__Servers__0: http://couchbase:8091/ # Reference to the "couchbase" service name on line 4
    depends_on:
    - couchbase # Reference to the "couchbase" service name on line 4
    command: ["./wait-for-it.sh", "http://couchbase:8091"]
Run Code Online (Sandbox Code Playgroud)

小智 3

我没有足够的声誉来发表评论,但我认为这可能是您的 .csproj 文件。您提到您升级了 Visual Studio。由于 .csproj 文件包含有关项目的信息(包括对系统程序集的引用),并且您将其复制到 Dockerfile 中,因此可能会出现以下情况:

  1. 由于您更新了 VS,因此需要更新 .csproj 文件。
  2. dockerfile“FROM”语句中的 dotnet core 版本与您本地使用的版本不同。

也许可以通过启动一个新项目并添加源代码来测试这一点,然后对新旧 .csproj 文件进行比较。您还可以备份原始文件并尝试手动修改 .csproj 文件。我发现一篇博客文章演示了将 vs2015 csproj 文件升级到 vs2017。希望它有帮助。