我已经用 Visual Studio 生成了一个 Dockerfile。它在 Visual Studio 中运行得很好,现在我正在尝试从 Windows 本身构建它( docker build .
,我尝试了很多组合)。但是我收到以下错误:
当我将副本更改为 ./client.csproj
它确实继续,然后我得到:
我究竟做错了什么?我将 Docker Linux 更改为 Windows,更改了 WSL 并重新启动了所有内容。
原文由 Sjardi Djoy Willems 发布,翻译遵循 CC BY-SA 4.0 许可协议
Visual Studio 的做法有点奇怪。
它不是在包含 Dockerfile 的文件夹中启动
docker build
,而是在父文件夹中启动并使用-f
选项指定 Dockerfile。我正在使用演示项目(试图为另一个问题创建一个最小的解决方案)并遇到了同样的情况。
我的演示项目的设置是
所以我 希望 去
但我收到你的错误信息。
相反,使用
.sln
文件转到父目录并使用-f
选项指定要在子文件夹中使用的 Dockerfile:_编辑_(感谢 Mike Loux、tblev 和 Goku):
注意
docker build
命令上的最后一个点。对于 docker,命令的最后一部分是 Docker 将使用的文件的位置。 通常 这是包含 Dockerfile 的文件夹,但这就是 VS 的不同之处。在这种情况下,dockerfile 使用
-f
指定。任何路径(例如COPY
中的指令)都相对于指定的位置。.
表示“当前目录”,在我的示例中是\WorkerService2
。我通过检查构建过程的输出进入了这个阶段,详细程度设置为详细。如果您选择工具/选项/项目和解决方案/构建和运行,您可以调整构建输出的详细程度,我做了详细的。
编辑#2 我想我已经弄清楚了为什么 Visual Studio 会这样做。它允许复制同一解决方案中的项目引用。
如果设置为从项目文件夹中执行
docker build
,则 docker 将无法COPY
解决方案中的任何其他项目。但是这种设置方式,当前目录是解决方案文件夹,您可以将引用的项目(子文件夹)复制到您的 docker 构建过程中。