当前位置: 首页 > 知识库问答 >
问题:

Docker support Visual Studio项目中的“未找到Docker生成路径”

阴礼骞
2023-03-14

我有C#解决方案,有4个项目,3个是Dlls,1个是控制台应用程序使用这些DLL。

我试图使用visual studio上的docker支持来构建我的docker映像,但我的docker文件失败,如下所示:

> FROM microsoft/windowsservercore:ltsc2016 
> EXPOSE 80 
> EXPOSE 1433 
> EXPOSE 29051
> 
> COPY bin/x64/debug /root/ ENTRYPOINT
> /root/RmsMainConsole.exe

我将CD放入docker文件所在的目录,并执行docker build。错误:

Docker CLI command : docker build -t rmsmainconsole:self-hosted .

Sending build context to Docker daemon  55.61MB
Step 1/6 : FROM microsoft/windowsservercore:ltsc2016
 ---> 9dbf7f740334
Step 2/6 : EXPOSE 80
 ---> Using cache
 ---> ad0ad85fd107
Step 3/6 : EXPOSE 1433
 ---> Using cache
 ---> 81ba13dbd4d4
Step 4/6 : EXPOSE 29051
 ---> Using cache
 ---> 1fa3db800abf
Step 5/6 : COPY bin/x64/debug /root/
COPY failed: CreateFile \\?\C:\ProgramData\Docker\tmp\docker-builder043346063\bin\x64\debug: The system cannot find the path specified.

你可以看到那条路找不到。而我试图在我的电脑上创建docker文件。sln级别。我更改了docker文件中的一行。

COPY RmsMain/bin/x64/debug /root/

注:已添加“rmsmaconsole”目录。

我在我的. sln级别执行了docker构建,并成功构建了它。日志是:

Sending build context to Docker daemon   1.15GB
Step 1/6 : FROM microsoft/windowsservercore:ltsc2016
 ---> 9dbf7f740334
Step 2/6 : EXPOSE 80
 ---> Running in fe97cf236d5a
Removing intermediate container fe97cf236d5a
 ---> c31e236353b6
Step 3/6 : EXPOSE 1433
 ---> Running in f031fce5ecba
Removing intermediate container f031fce5ecba
 ---> 96c704c68ffb
Step 4/6 : EXPOSE 29051
 ---> Running in 365e2be43d0e
Removing intermediate container 365e2be43d0e
 ---> d30c3fb2214b
Step 5/6 : COPY RmsMainConsole/bin/x64/debug /root/
 ---> b214c1edc256
Step 6/6 : ENTRYPOINT /root/RmsMainConsole.exe
 ---> Running in 5c819915532a
Removing intermediate container 5c819915532a
 ---> 247f01bb9b82
Successfully built 247f01bb9b82
Successfully tagged rmsmainconsole:self-hosted

我注意到成功构建和失败构建之间有两个区别:1。大小取决于docker上下文2。步骤5/6中的日志:

复制失败:CreateFile\?\C:\ProgramData\Docker\tmp\Docker-Builder04334603\bin\x64\debug:系统找不到指定的路径。

---

我应该如何使用visual studio docker支持来构建我的docker形象。我哪里出错了?

共有3个答案

宫晟
2023-03-14

经过一些思考、尝试和错误之后,问题不在于docker对visual studio的支持。Docker build必须在我的解决方案目录的根目录下运行,因为Docker build需要能够找到映像文件所依赖的所有依赖项。

但让我好奇的是,那么docker对visual studio的支持是如何发挥作用的呢?我只能右键点击-

我目前的解决方案是在解决方案的根部手动添加一个docker文件。如果有人知道视觉工作室docker支持有更好的方法来解决这个问题,我会很高兴的。

谢谢

支彭亮
2023-03-14

我认为实际原因要简单得多。如果查看docker ignore(.dockerignore)文件,您会注意到它会忽略除几个obj文件夹之外的所有内容。尝试删除docker ignore文件顶部的*以测试这一点。然后你可以有选择地忽略项目文件夹中你想复制的东西。我也遇到了这个问题,在我想查看忽略文件之前,我经历了很多尝试和错误。

章远航
2023-03-14

不确定我是否回答了你的问题——第一个还是第二个:)。

我还想知道Visual Studio是如何使用Docker的,因为Dockerfile是在项目文件夹中创建的,但它包含了像在根(sln)文件夹中一样的COPY路径。

我玩了一下,答案很简单。

Visual Studio使用-f开关从解决方案文件夹生成图像,以指向Dockerfile。您可以查看Output窗口,看到它运行以下命令:

docker build -f "<path to Dockerfile>" -t <name:tag> --target base  --label "com.microsoft.created-by=visual-studio" "<solution dir>"

因此,我建议将Dockerfile放在project文件夹中,并像Visual Studio那样使用-f选项从根文件夹运行它。

它能回答你的问题吗?

 类似资料:
  • 我有3个项目,ProjectB,ProjectC。 当我构建ProjectB时,它没有任何问题。但是当我试图构建ProjectA时,它在控制台上出现以下错误而失败。 评估项目“:ProjectB”时出现问题。在项目:ProjectB中找不到路径为:ProjectC的项目。 build.gradle-ProjectC settings.gradle-ProjectC build.gradle - 项

  • 我想做我的第一个码头集装箱 我安装了dokcer-ce,遵循ubuntu的docker教程。 我创建一个文件夹,并把我的Dockerfile在它。 在这个文件夹中,我做了一个: 我总是有这样的输出 编辑:我在sshd,没有工作?!

  • 我尝试用pip构建docker镜像,运行pip3安装*包*--索引url=*url*--受信任主机=*url*。但是,它失败了,并出现以下错误: 的匹配发行版。 然而,在我删除了包并成功构建了映像后,我可以从docker容器中成功安装包! 我用来构建镜像的bash是:

  • 我正在使用新的日蚀氧气。我的项目设置包括Maven。Maven依赖项之一是Guava: 我面临的两个问题不允许我构建项目: 1. 2. 这里是我试图解决它:我已经使干净

  • 我已经将一个现有的项目导入到eclipse,但它只给java文件提供错误,我已经设置了库,我还设置了Windows>Preferences>Installed JR,但问题没有解决。错误消息是由于生成路径不完整,项目未生成。找不到java.lang.Object的类文件。修复错误。错误截图

  • 所以我有一个大型Java项目,我称之为ProjectA。我还有另一个项目,ProjectB,这是一个Maven项目,它包括ProjectA作为依赖项(通过将ProjectA编译为jar文件)。我还有许多其他Maven项目:ProjectC1、ProjectC2等。其中每一个都包括ProjectB作为Maven依赖项。 ProjectB包含所有ProjectC项目通用/可访问的代码,以及从Proje