Visual Studio 的做法有点奇怪。
它不会在包含 Dockerfile 的文件夹中启动 docker build,而是在父文件夹中启动并使用 -f 选项指定 Dockerfile。
我正在使用演示项目(试图为另一个问题创建一个最小的解决方案)并遇到了同样的情况。
我的演示项目的设置是
\WorkerService2 ("solution" folder)
+- WorkerService2.sln
+- WorkserService2 ("project" folder)
+- DockerFile
+- WorkerService2.csproj
+- ... other program files
所以我会期待去
cd \Workerservice2\WorkerService2
docker build .
但是我收到了你的错误信息。
=> ERROR [build 3/7] COPY [WorkerService2/WorkerService2.csproj, WorkerService2/] 0.0s
------
> [build 3/7] COPY [WorkerService2/WorkerService2.csproj, WorkerService2/]:
------
failed to compute cache key: "/WorkerService2/WorkerService2.csproj" not found: not found
相反,使用 .sln 文件转到父目录并使用 docker -f 选项指定要在子文件夹中使用的 Dockerfile:
cd \Workerservice2
docker build -f WorkerService2\Dockerfile --force-rm -t worker2/try7 .
docker run -it worker2/try7
编辑(感谢 Mike Loux、tblev 和 Goku):
注意docker build 命令的最后一个点。
对于 docker,命令的最后一部分是 Docker 将使用的文件的位置。 通常这是包含 Dockerfile 的文件夹,但这就是 VS 的不同之处。在这种情况下,dockerfile 使用-f 指定。任何路径(例如 dockerfile 中的 COPY 指令)都相对于指定的位置。 . 表示“当前目录”,在我的示例中为 \WorkerService2。
我通过检查构建过程的输出进入了这个阶段,详细程度设置为详细。
如果您选择工具/选项/项目和解决方案/构建和运行,您可以调整构建输出的详细程度,我做了详细的。