Ошибка «getcwd () завершилась ошибкой: нет такого файла или каталога» при попытке запуска из VS в Docker - PullRequest
8 голосов
/ 30 января 2020

У меня есть проект, настроенный для локального запуска в Docker с docker -compose. До недавнего времени все работало нормально. Я не верю, что я изменил что-то, что должно повлиять на это (кроме, может быть, обновления 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

Я пробовал разные вещи (изменение базового изображения в Docker файл, удаление старых изображений и контейнеров и многое другое), но я получаю одно и то же сообщение об ошибке. Странно то, что когда я делаю File-> New, Visual Studio генерирует очень похожий Docker файл, и он работает нормально. Я понятия не имею, в чем проблема, но я надеюсь, что кто-то здесь сможет ее обнаружить.

Мое полное репо доступно на Github . Вот docker для основного проекта 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"]

и docker -компонент для решения (даже без 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"]

Ответы [ 4 ]

3 голосов
/ 05 февраля 2020

У меня недостаточно репутации, чтобы комментировать, но я думаю, что это может быть ваш файл .csproj. Вы упомянули, что обновили Visual Studio. Поскольку файл .csproj содержит информацию о проекте (включая ссылки на системные сборки), и вы копируете ее в свой Dockerfile, возможно, что:

  1. Файл .csproj необходимо обновить, так как вы обновленная VS.
  2. Базовая версия do tnet в вашем операторе dockerfile 'FROM' - это версия, отличная от той, которую вы используете локально.

Возможно, протестируйте это, запустив новый проект и добавив исходный код, а затем выполните diff для старых и новых файлов .csproj. Вы также можете сделать резервную копию оригинала и попробовать изменить файл .csproj вручную. Я нашел сообщение в блоге , которое демонстрирует обновление файла csroj vs2015 до vs2017. Надеюсь, это поможет.

1 голос
/ 07 апреля 2020

getcwd() ошибка, означает, что решение потеряло контекст для пути. Я обнаружил, что полное удаление решения dock-compose и связанного с ним файла Dockerfile из проекта решило проблему. Это взломано, но работает, если вы в безвыходном положении.

1 голос
/ 11 февраля 2020

Поскольку у меня недостаточно репутации, я не могу комментировать ваш вопрос. Но одна вещь, которая озадачивает меня, это то, что вы используете в качестве базового образа изображение, которое не имеет. Net SDK, и если вы попытаетесь выполнить команду, для которой требуется SDK, она не будет работать

I Я предполагаю, что в контейнере f93fb2962a1e использует изображение, созданное файлом docker, который вы разместили в вопросе

0 голосов
/ 11 февраля 2020

Я верю, что ваш текущий рабочий каталог удален или путь к рабочему каталогу был сброшен. Но это будет первый вариант, потому что обновление VS может удалить каталог /tmp на вашем компьютере docker, поэтому его больше нет, и он будет создан при каком-то внешнем событии.

Или установите порт для блокировки подключения к вашему docker устройству.

  1. Проверить подключение к docker машине
  2. Проверить наличие папки, которая используется в качестве рабочего каталога на docker машине

Если вы не нашли Проблема, затем продолжите с этим:

docker exec --it {containerID} /bin/sh

вы можете использовать эту официальную docker статью отладки с этим, следуйте каталогам, docker пытающимся получить доступ и проверяйте их существование ,

С помощью этой отладки вы сможете обнаружить проблемы.

Я надеюсь, что это помогло вам

...