在研究基于ServiceFabric的解决方案并构建docker映像时,由于目录结构,我得到以下信息:
我的目录结构是
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"]
正如我们在这里可以清楚地看到的那样,我需要与主Foo.Service.csproj一起构建此Lib.csproj。问题出在Lib项目的目录位置。因为其他一些解决方案使用了它,所以我不能将这个Lib项目移到Foo.Fabric文件夹中。
现在,最初我收到以下错误消息:“服务'foo'无法构建:COPY失败:构建上下文之外的禁止路径:../Foo.Lib/Foo.Lib/Foo.Lib.csproj”,确定,我得到了这,我有一个错误的上下文,所以我在docker-compose.yml中更新为
构建:上下文:。构建:上下文:..
将上下文更改为当前目录的父目录,因此我将不得不再次更改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桌面社区版本2.0.0.0-win81(29211)引擎:18.09.0
Visual Studio Professional 2017 15.9.3
Windows 10 1809
答案 0 :(得分:1)
通过在dockerfile旁边使用“ .dockerignore”文件,确保从构建中排除.vs文件夹。通常,对于VS项目,它们看起来像这样:
.dockerignore
.env
.git
.gitignore
.vs
.vscode
docker-compose.yml
docker-compose.*.yml
*/bin
*/obj