我有C#解决方案,有4个项目,其中3个是Dll,1个是控制台应用程序使用这些DLL。
我尝试在Visual Studio上使用Docker支持来构建我的Docker映像,但失败 我的dockerfile如下:
> FROM microsoft/windowsservercore:ltsc2016
> EXPOSE 80
> EXPOSE 1433
> EXPOSE 29051
>
> COPY bin/x64/debug /root/ ENTRYPOINT
> /root/RmsMainConsole.exe
我将CD放入dockerfile所在的目录并执行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.
您可以看到找不到PATH。 而我尝试在.sln级别上创建docker文件。 我在docker文件中更改了一行。
复制RmsMainConsole / bin / x64 / debug / root /
注意:已添加“ RmsMainConsole”目录。
我在.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-builder043346063 \ bin \ x64 \ debug:系统找不到指定的路径。
和
---> b214c1edc256
我应该如何使用Visual Studio Docker支持来构建我的Docker映像。我哪里做错了 ?
答案 0 :(得分:2)
我认为这样做的实际原因要简单得多。如果您查看 docker ignore (.dockerignore) 文件,您会注意到它忽略了除几个 obj 文件夹之外的所有内容。尝试删除 docker ignore 文件顶部的 * 以测试这一点。然后,您可以有选择地忽略项目文件夹中想要复制的内容。我也遇到了这个问题,在我考虑查看忽略文件之前,我进行了大量的反复试验。
答案 1 :(得分:1)
不确定,我是否回答您的问题-第一还是第二:)。
我还想知道Visual Studio如何使用Docker,因为Dockerfile是在项目文件夹中创建的,但是它包含COPY的路径,就像在根(sln)文件夹中一样。
我玩了一下,答案很简单。
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放在项目文件夹中,并像Visual Studio一样使用-f
选项从根文件夹运行它。
它可以回答您的问题吗?
答案 2 :(得分:0)
经过一番思考,反复试验和错误后,问题并不在于Docker支持Visual Studio。 Docker构建必须在我的解决方案目录的根目录下运行,因为Docker构建需要能够找到图像文件所依赖的所有依赖项。
但是让我感到好奇的是,那么对Visual Studio的Docker支持如何发挥作用?我只能在控制台应用程序项目上单击鼠标右键->添加Docker支持。
我当前的解决方案是在解决方案的根目录手动添加一个docker文件。如果有人知道Visual Studio Docker支持可以解决此问题,这会很高兴吗?
谢谢