Tengo un proyecto configurado para ejecutarse localmente en Docker con docker-compose. Hasta hace poco, ha estado funcionando bien. No creo que haya cambiado nada que pueda afectar esto (¿excepto quizás una actualización VS?), E incluso he intentado volver a una confirmación anterior. En todos los casos, ahora recibo un mensaje de error, que aparece en la ventana de salida de Visual Studio como:
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
He intentado una variedad de cosas diferentes (cambiar la imagen base en el archivo Docker, eliminar imágenes y contenedores antiguos, y más) pero sigo recibiendo el mismo mensaje de error. Lo extraño es que cuando hago un Archivo-> Nuevo, Visual Studio genera un archivo Docker de aspecto muy similar y funciona bien. No tengo idea de cuál es el problema, pero espero que alguien aquí pueda detectarlo.
Mi repositorio completo está disponible en Github . Aquí está la ventana acoplable para el proyecto principal asp.net:
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"]
y el docker-compose para la solución (incluso sin las cosas de Couchbase obtengo el mismo error, pero lo estoy pegando aquí para completarlo):
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"]
fuente
Respuestas:
No tengo suficiente reputación para comentar, pero creo que podría ser su archivo .csproj. Usted mencionó que actualizó Visual Studio. Dado que el archivo .csproj contiene información sobre el proyecto (incluidas referencias a ensamblajes del sistema) y lo está copiando en su Dockerfile, es posible que:
Quizás pruebe esto comenzando un nuevo proyecto y agregando su fuente, luego haga una diferencia en los archivos .csproj viejos y nuevos. También puede hacer una copia de seguridad del original e intentar modificar el archivo .csproj manualmente. Encontré una publicación de blog que demuestra la actualización de un archivo csproj vs2015 a vs2017. Espero que ayude.
fuente
Como no tengo suficiente reputación, no puedo comentar tu pregunta. Pero una cosa que me desconcierta es el hecho de que está utilizando como imagen base una imagen que no tiene .Net SDK y si intenta ejecutar un comando que requiere un SDK se ve que falla
Supongo que, en el contenedor,
f93fb2962a1e
está utilizando la imagen creada por el archivo acoplable que publicó en la preguntafuente
getcwd()
error, significa que la solución perdió contexto a la ruta. Descubrí que eliminar completamente ladock-compose
solución y el archivo Dockerfile asociado del proyecto solucionó el problema. Es hacky pero funciona si estás en apuros.fuente
Creo que su directorio de trabajo actual se eliminó o se restableció la ruta al directorio de trabajo. Pero será la primera opción porque la actualización de VS puede eliminar el directorio
/tmp
en su máquina acoplable, por lo que ya no está allí, y se creará en algún evento externo.O configure el puerto para bloquear la conexión a su máquina acoplable.
Si no encontró el problema, continúe con esto:
puede usar este artículo oficial de depuración de acopladores con esto, siga los directorios a los que está intentando acceder el acoplador y verifique su existencia.
Con esta depuración deberías poder descubrir problemas.
Espero que te haya ayudado
fuente