Eu tenho um projeto configurado para ser executado localmente no Docker com docker-compose. Até recentemente, estava funcionando bem. Não acredito que mudei nada que devesse afetar isso (exceto talvez uma atualização do VS?) E tentei reverter para um commit mais antigo. Em todos os casos, agora estou recebendo uma mensagem de erro, que aparece na janela de saída do 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
Eu tentei várias coisas diferentes (alterar a imagem base no arquivo Docker, excluir imagens e contêineres antigos e muito mais), mas continuo recebendo a mesma mensagem de erro. O estranho é que, quando eu faço um Arquivo-> Novo, o Visual Studio gera um arquivo Docker com aparência muito semelhante e funciona bem. Não tenho idéia de qual é o problema, mas espero que alguém aqui possa identificá-lo.
Meu repositório completo está disponível no Github . Aqui está a janela de encaixe para o projeto principal do 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"]
e o docker-compondo para a solução (mesmo sem o material do Couchbase, estou recebendo o mesmo erro, mas o colo aqui para garantir a integridade):
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"]
fonte
Respostas:
Não tenho reputação suficiente para comentar, mas acho que pode ser o seu arquivo .csproj. Você mencionou que atualizou o Visual Studio. Como o arquivo .csproj contém informações sobre o projeto (incluindo referências aos assemblies do sistema) e você está copiando-o no Dockerfile, é possível que:
Talvez teste isso iniciando um novo projeto e adicionando sua fonte, depois faça uma diferença nos arquivos .csproj antigos e novos. Você também pode fazer backup do original e tentar modificar o arquivo .csproj manualmente. Encontrei uma postagem no blog que demonstra a atualização de um arquivo csproj vs2015 para vs2017. Espero que ajude.
fonte
Como não tenho reputação suficiente, não posso comentar sua pergunta. Mas uma coisa que me intriga é o fato de você estar usando como imagem base uma imagem que não possui .Net SDK e, se você tentar executar um comando que exija um SDK, ele falhará.
Suponho que, no contêiner,
f93fb2962a1e
esteja usando a imagem criada pelo arquivo docker que você postou na perguntafonte
getcwd()
erro, significa que a solução perdeu o contexto para o caminho. Descobri que remover completamente adock-compose
solução e o arquivo Dockerfile associado do projeto corrigiu o problema. É hacky, mas funciona se você estiver em dificuldades.fonte
Eu acredito que seu diretório de trabalho atual foi excluído ou o caminho para o diretório de trabalho foi redefinido. Mas será a primeira opção, porque a atualização do VS pode remover o diretório
/tmp
da máquina docker, de modo que não existe mais e será criada em algum evento externo.Ou defina a porta para bloquear a conexão com sua máquina docker.
Se você não encontrou um problema, continue com isso:
você pode usar este artigo oficial de depuração do docker com isso, siga os diretórios que o docker está tentando acessar e verifique a existência deles.
Com essa depuração, você deve descobrir problemas.
Espero que tenha ajudado
fonte