Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用项目解决方案创建docker容器,其中lib项目位于比建筑上下文高一级的位置_Docker_.net Core_Visual Studio 2017_Docker Compose_Solution - Fatal编程技术网

如何使用项目解决方案创建docker容器,其中lib项目位于比建筑上下文高一级的位置

如何使用项目解决方案创建docker容器,其中lib项目位于比建筑上下文高一级的位置,docker,.net-core,visual-studio-2017,docker-compose,solution,Docker,.net Core,Visual Studio 2017,Docker Compose,Solution,我有一个VS2017(v5.18.0)解决方案,其中包含一个.NET Core 2.0控制台应用程序“ReferenceGenerator”作为“startup”应用程序。该解决方案还包含两个.Net核心lib2.0项目FwCore和LibReferenceGenerator,它们是“自主开发”的libs。我添加了docker支持(Linux),因此添加了创建docker应用程序所需的所有文件。我可以用“docker for windows Linux模式”在“docker compose”模式

我有一个VS2017(v5.18.0)解决方案,其中包含一个.NET Core 2.0控制台应用程序“ReferenceGenerator”作为“startup”应用程序。该解决方案还包含两个.Net核心lib2.0项目FwCore和LibReferenceGenerator,它们是“自主开发”的libs。我添加了docker支持(Linux),因此添加了创建docker应用程序所需的所有文件。我可以用“docker for windows Linux模式”在“docker compose”模式下调试应用程序。应用程序运行良好。如果我试图构建一个发布版本,我会得到一个错误,即从非法路径复制。docker文件如下所示:

FROM microsoft/dotnet:2.0-runtime AS base
WORKDIR /app

FROM microsoft/dotnet:2.0-sdk AS build
WORKDIR /src
COPY ReferenceGenerator/ReferenceGenerator.csproj 
ReferenceGenerator/
COPY ../LibReferenceGenerator/LibReferenceGenerator.csproj ../LibReferenceGenerator/
COPY ../FwCore/FwCore/FwCore.csproj ../FwCore/FwCore/
RUN dotnet restore 
ReferenceGenerator/ReferenceGenerator.csproj
COPY . .
WORKDIR /src/ReferenceGenerator
RUN dotnet build ReferenceGenerator.csproj -c Release -o /app

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "ReferenceGenerator.dll"]
/Production/ReferenceGenerator/ReferenceGenerator.sln
/Production/ReferenceGenerator/ReferenceGenerator/ReferenceGenerator.csproj
/Production/LibReferenceGenerator/LibReferenceGenerator.csproj
/Production/FwCore/FwCore/FwCore.csproj
/Production/ReferenceGenerator/ReferenceGenerator/Dockerfile
以下内容的行:

COPY ../LibReferenceGenerator/LibReferenceGenerator.csproj ../LibReferenceGenerator/
正在导致错误:

Step 6/17 : COPY ../LibReferenceGenerator/LibReferenceGenerator.csproj ../LibReferenceGenerator/
1>Service 'referencegenerator' failed to build: COPY failed: Forbidden path outside the build context: ../LibReferenceGenerator/LibReferenceGenerator.csproj ()
我已经读到,相对路径是不允许的,就这样吧。但是编译器的输出已经在项目ReferenceGenerator的bin目录中完成。我已经尝试删除引用libs的两个复制行,但是构建在dotnet构建阶段抱怨缺少lib项目文件

在我看来,解决方案中包含一些“homebuild”lib项目是一种非常常见的情况。我是docker集装箱的新手,我不知道如何解决这个问题,有人吗

其他信息我的文件结构如下所示:

FROM microsoft/dotnet:2.0-runtime AS base
WORKDIR /app

FROM microsoft/dotnet:2.0-sdk AS build
WORKDIR /src
COPY ReferenceGenerator/ReferenceGenerator.csproj 
ReferenceGenerator/
COPY ../LibReferenceGenerator/LibReferenceGenerator.csproj ../LibReferenceGenerator/
COPY ../FwCore/FwCore/FwCore.csproj ../FwCore/FwCore/
RUN dotnet restore 
ReferenceGenerator/ReferenceGenerator.csproj
COPY . .
WORKDIR /src/ReferenceGenerator
RUN dotnet build ReferenceGenerator.csproj -c Release -o /app

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "ReferenceGenerator.dll"]
/Production/ReferenceGenerator/ReferenceGenerator.sln
/Production/ReferenceGenerator/ReferenceGenerator/ReferenceGenerator.csproj
/Production/LibReferenceGenerator/LibReferenceGenerator.csproj
/Production/FwCore/FwCore/FwCore.csproj
/Production/ReferenceGenerator/ReferenceGenerator/Dockerfile

请任何人。那些试图帮助我的人没有成功。我完全被困在开发中……

副本中缺少一个级别

应该是:
复制.././LibReferenceGenerator/LibReferenceGenerator.csproj../LibReferenceGenerator/

正如错误所述,无法复制存在于生成上下文之外的文件。当您运行类似于
docker image build.
的命令时,最后一个参数(
)指定生成上下文。该上下文将复制到Docker引擎以进行构建。除此之外的文件(例如,
。/LibReferenceGenerator/LibReferenceGenerator.csproj
)根本不存在

因此,为了使示例正常工作,您需要将构建上下文向上调整一个级别,以便访问
LibReferenceGenerator
FwCore
。然后,将
指令的源代码复制到与上一级上下文相关的
指令

请注意,Dockerfile的默认位置是构建上下文中名为
Dockerfile
的文件。您需要移动Dockerfile,或者使用
-f,--file
选项指定自定义路径


答案是,没有解决方案

如果需要库,则必须使用(私有)nuget库包含它们。 这不是一个简单的解决方案,因为在调试时,您没有可用的库源,但是在构建上下文之外包含lib是不可能的,我在研究internet时学到了


此外,在微服务环境中,共享代码应该最小化,以避免团队破坏其他团队的代码。对于所有喜欢为这个问题提供解决方案的开发人员来说,很抱歉,除了使用nuget软件包的解决方案之外,没有解决方案

您可以添加应用程序的结构(文件夹+docker文件)?您可以在问题中添加而不是在评论中添加吗?这样您就可以格式化文本。docker文件在哪里?已将相关文件放入问题中。干杯,有进展吗?同样的问题,谢谢你的回复,但是看看我的文件(第一部分),没有“docker image build.”部分。因此,我不知道要编辑什么…“docker image build”。您启动(在cmd by ex中)以生成docker映像的命令基于什么,您的项目中是否有docker-compose.yml文件?看起来VS正在使用Docker Compose来驱动图像构建。如果是这样的话,您可以在那里修改构建上下文和Dockerfile的路径。我确实已经设法修改了它。这一举措似乎奏效了。但现在我仍在努力解决复制功能。我还没有提供正确的复制命令。让您随时了解进度…我可以通过修改docker-compose.yml将Dockerfile移动到不同的文件夹中,但只要我通过将上下文从“.”改为“.”/”将其更改到更高的级别,我就会从visual studio中收到一个奇怪的锁定错误“OSError:无法读取上下文中的文件:D:\source\Production\ReferenceGenerator\.vs\ReferenceGenerator\v15\Server\sqlite3\db.lock“路径正确,数据库块文件存在。因此,混淆视听似乎是出于某种原因破坏了sdk脚本。真是一团糟。。。我喜欢容器的想法,但创建一个(:)似乎是一件痛苦的事情,但没有解决它。错误现在显示了新的路径..服务'referencegenerator'无法生成:复制失败:生成上下文之外的禁止路径:../../Lib/LibReferenceGenerator/LibReferenceGenerator.csproj()它应该是../../LibReferenceGenerator/LibReferenceGenerator.csproj而不是../../Lib/LibReferenceGenerator/LibReferenceGenerator.csproj服务“referencegenerator”未能生成:复制失败:生成上下文之外的禁止路径:..//LibReferenceGenerator/LibReferenceGenerator.csproj()抱歉,现在它与您的建议完全匹配,但仍然没有解决方案:步骤6/17:复制../../LibReferenceGenerator/LibReferenceGenerator.csproj../LibReferenceGenerator/1>服务“referencegenerator”未能生成:复制失败:生成上下文之外的禁止路径:../../LibReferenceGenerator/LibReferenceGenerator.csproj()刚才看到,就像黄金忠所说的。Docker无法访问此文件。可从DockerFile访问的文件从DockerFile及其子文件夹开始。