VS 2017 PermissionError: [Errno 13] Отказано в доступе: 'v15 \\ Server \\ sqlite3 \\ db.lock' - PullRequest
0 голосов
/ 08 января 2019

Работая над решением на основе ServiceFabric и создавая образ докера, я получаю следующее из-за своей структуры каталогов:

Моя структура каталогов

D:
  D1:
    src:
      Foo.Fabric:                          
        Foo.Fabric:                      -----------------> This is context right now
          .vs
        Foo.Service:
          DockerFile
          Foo.Service.csproj
        docker-compose.yml
        .dockerignore
      Foo.Lib:
        Foo.Lib:
          Foo.Lib.csproj

Содержимое моего docker-compose.yml выглядит так:

version: '3.4'
services:
  foo:
    image: foodockerimage
    build:
      context: .
      dockerfile: Foo.Service/Dockerfile

А содержимое моего dockerfile выглядит следующим образом

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY Foo.Service/Foo.Service.csproj Foo.Service/
COPY ../Foo.Lib/Foo.Lib/Foo.Lib.csproj ../Foo.Lib/Foo.Lib/
RUN dotnet restore Foo.Service/Foo.Service.csproj
COPY . .
WORKDIR /src/Foo.Service
RUN dotnet build Foo.Service.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish Foo.Service.csproj -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Foo.Service.dll"]

Как мы видим здесь, ясно, что мне нужно собрать этот Lib.csproj вместе с моим основным Foo.Service.csproj. Проблема в расположении каталога проекта Lib. Поскольку это используется некоторыми другими решениями, я не могу переместить этот проект Lib в папку Foo.Fabric.

Теперь изначально я получил ошибку «Служба 'foo' не смогла скомпилировать: COPY fail: запрещенный путь вне контекста сборки: ../Foo.Lib/Foo.Lib/Foo.Lib.csproj", ОК, я получил это, у меня неправильный контекст, поэтому я обновил в docker-compose.yml как build: context:. построить: контекст: ..
чтобы изменить контекст на родительский каталог текущего каталога, поэтому мне снова придется изменить пути dockerfile, в результате чего docker-compose.yml будет иметь вид

version: '3.4'
services:
  foo:
    image: foodockerimage
    build:
      context: ..
      dockerfile: Foo.Fabric/Foo.Service/Dockerfile

А также

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY Foo.Fabric/Foo.Service/Foo.Service.csproj Foo.Fabric/Foo.Service/  #Updated
COPY Foo.Lib/Foo.Lib/Foo.Lib.csproj Foo.Lib/Foo.Lib/  #Updated
RUN dotnet restore Foo.Service/Foo.Service.csproj
COPY . .
WORKDIR /src/Foo.Service
RUN dotnet build Foo.Service.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish Foo.Service.csproj -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Foo.Service.dll"]

Теперь у меня есть эта ошибка "PermissionError: [Errno 13] В доступе отказано: '\\? \ D: \ D1 \ src \ Foo.Fabric \ .vs \ Foo.Fabric \ v15 \ Server \ sqlite3 \ db.lock «"

Я действительно трахаюсь с этим и не могу встать. Кстати, я использую:

Docker Desktop Community Версия 2.0.0.0-win81 (29211) Движок: 18.09.0

Visual Studio Professional 2017 15.9.3

Windows 10 1809

1 Ответ

0 голосов
/ 11 января 2019

Обязательно исключите папку .vs из вашей сборки, используя файл '.dockerignore' рядом с файлом dockerfile. Обычно они выглядят так, для проектов VS:

.dockerignore
.env
.git
.gitignore
.vs
.vscode
docker-compose.yml
docker-compose.*.yml
*/bin
*/obj
...