Ich habe ein Projekt eingerichtet, das lokal in Docker mit Docker-Compose ausgeführt werden soll. Bis vor kurzem hat es gut funktioniert. Ich glaube nicht, dass ich etwas geändert habe, das dies beeinflussen könnte (außer vielleicht ein VS-Upgrade?), Und ich habe sogar versucht, auf ein älteres Commit zurückzugreifen. In allen Fällen wird jetzt eine Fehlermeldung angezeigt, die im Ausgabefenster von Visual Studio wie folgt angezeigt wird:
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
Ich habe verschiedene Dinge ausprobiert (Ändern des Basisabbilds in der Docker-Datei, Löschen alter Bilder und Container usw.), aber es wird immer wieder dieselbe Fehlermeldung angezeigt. Das Seltsame ist, dass Visual Studio beim Ausführen einer Datei-> Neu eine sehr ähnlich aussehende Docker-Datei generiert, die einwandfrei funktioniert. Ich habe keine Ahnung, wo das Problem liegt, aber ich hoffe, dass jemand hier es erkennen kann.
Mein vollständiges Repo ist auf Github verfügbar . Hier ist der Docker für das asp.net-Kernprojekt:
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"]
und das Docker-Compose für die Lösung (auch ohne das Couchbase-Zeug erhalte ich den gleichen Fehler, aber ich füge ihn der Vollständigkeit halber hier ein):
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"]
quelle
Antworten:
Ich habe nicht genug Ruf, um einen Kommentar abzugeben, aber ich denke, es könnte Ihre .csproj-Datei sein. Sie haben erwähnt, dass Sie Visual Studio aktualisiert haben. Da die .csproj-Datei Informationen zum Projekt enthält (einschließlich Verweise auf Systemassemblys) und Sie diese in Ihre Docker-Datei kopieren, ist Folgendes möglich:
Testen Sie dies möglicherweise, indem Sie ein neues Projekt starten und Ihre Quelle hinzufügen, und führen Sie dann einen Unterschied zwischen den alten und neuen .csproj-Dateien durch. Sie können auch das Original sichern und versuchen, die .csproj-Datei manuell zu ändern. Ich habe einen Blog-Beitrag gefunden , der das Upgrade einer vs2015-csproj-Datei auf vs2017 demonstriert. Hoffentlich hilft es.
quelle
Da ich nicht genug Ruf habe, kann ich Ihre Frage nicht kommentieren. Eine Sache, die mich verwundert, ist die Tatsache, dass Sie als Basis-Image ein Image verwenden, das kein .Net SDK enthält. Wenn Sie versuchen, einen Befehl auszuführen, für den ein SDK erforderlich ist, schlägt dies fehl
Ich gehe davon aus, dass im Container
f93fb2962a1e
das Bild verwendet wird, das von der Docker-Datei erstellt wurde, die Sie in der Frage gepostet habenquelle
getcwd()
Fehler bedeutet, dass die Lösung den Kontext zum Pfad verloren hat. Ich habe festgestellt, dassdock-compose
das Problem durch vollständiges Entfernen der Lösung und der zugehörigen Dockerfile-Datei aus dem Projekt behoben wurde. Es ist hacky, funktioniert aber, wenn Sie in einer Bindung sind.quelle
Ich glaube, dass Ihr aktuelles Arbeitsverzeichnis gelöscht wurde oder der Pfad zum Arbeitsverzeichnis zurückgesetzt wurde. Dies ist jedoch die erste Option, da durch die Aktualisierung von VS möglicherweise das Verzeichnis
/tmp
auf Ihrem Docker-Computer entfernt wurde, sodass es nicht mehr vorhanden ist, und es bei einem externen Ereignis erstellt wird.Oder setzen Sie den Port auf Blockieren der Verbindung zu Ihrem Docker-Computer.
Wenn Sie kein Problem gefunden haben, fahren Sie fort mit:
Sie können diesen offiziellen Docker- Debugging-Artikel damit verwenden. Folgen Sie den Verzeichnissen, in denen Docker versucht, auf ihre Existenz zuzugreifen und sie zu überprüfen.
Mit diesem Debugging sollten Sie in der Lage sein, Probleme zu entdecken.
Ich hoffe es hat dir geholfen
quelle