Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error "getcwd() failed: No such file or directory" when trying to run from VS in Docker

I have a project set up to run locally in Docker with docker-compose. Until recently, it's been working fine. I don't believe I changed anything that should affect this (except maybe a VS upgrade?), and I've even tried rolling back to an older commit. In all cases, I'm now getting an error message, which appears in Visual Studio's output window as:

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

I've tried a variety of different things (changing the base image in the Docker file, deleting old images and containers, and more) but I keep getting the same error message. The weird thing is that when I do a File->New, Visual Studio generates a very similar looking Docker file and it works fine. I have no idea what the problem is, but I'm hoping someone here can spot it.

My full repo is available on Github. Here is the docker for the asp.net core project:

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"]

and the docker-compose for the solution (even without the Couchbase stuff I'm getting the same error, but I'm pasting it here for completeness):

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"]
like image 995
Matthew Groves Avatar asked Jan 30 '20 15:01

Matthew Groves


3 Answers

I don't have enough reputation to comment but I think it might be your .csproj file. You mentioned you upgraded Visual Studio. Since the .csproj file contains information about the project (including references to system assemblies), and you are copying it in your Dockerfile, it's possible that:

  1. The .csproj file needs to be updated since you updated VS.
  2. The dotnet core version in your dockerfile 'FROM' statement is a different version than what you're using locally.

Maybe test this by starting a new project and adding your source, then do a diff on the old and new .csproj files. You can also backup the original and try modifying the .csproj file manually. I found a blog post that demonstrates upgrading a vs2015 csproj file to vs2017. Hopefully it helps.

like image 150
jaymac18 Avatar answered Oct 17 '22 00:10

jaymac18


Because I don't have enough reputation I cannot comment on your question. But one thing that puzzles me is the fact that you are using as base image an image that doesn't have .Net SDK and if you try to run a command that requires an SDK looks it fails

I am assuming, in the container, f93fb2962a1e is using the image created by the docker file you posted in the question

like image 1
Stephane Moser Avatar answered Oct 17 '22 01:10

Stephane Moser


getcwd() error, means the solution lost context to path. I found that completely removing the dock-compose solution and the associated Dockerfile file from the project fixed the problem. It's hacky but works if you're in a bind.

like image 1
Laser Hawk Avatar answered Oct 17 '22 01:10

Laser Hawk