ASP.NET Core Docker构建报错:COPY *.sln ./未指定源文件
解决Docker构建时找不到.sln文件的问题
这问题我碰到过好多次,VS自动生成的Dockerfile默认是假设你在解决方案根目录执行构建命令的,但你现在是在项目子目录跑docker build,自然找不到上层的.sln文件。给你几个靠谱的解决办法:
方案一:切换到解决方案根目录构建(最推荐,符合VS默认预期)
这是最直观也最不容易出错的方式,步骤很简单:
- 打开终端,切换到你的解决方案根目录,也就是
/Test01 - 执行构建命令:
这里的docker build -t test01-image -f Test01/Dockerfile .-f参数用来指定Dockerfile的位置(它在子目录Test01里),最后的.表示把当前目录(解决方案根)作为构建上下文,这样Dockerfile里的COPY *.sln ./就能正确找到解决方案文件了。
方案二:在项目目录构建,但指定父目录为上下文
如果你不想切换目录,就在项目目录/Test01/Test01下直接执行这条命令:
docker build -t test01-image -f Dockerfile ../
这里的../把构建上下文设置为父目录(也就是解决方案根),同时指定当前目录的Dockerfile,这样同样能让COPY指令找到上层的.sln文件。
方案三:修改Dockerfile路径(不推荐)
如果你一定要保持在项目目录构建且不调整上下文,那只能修改Dockerfile里的路径配置,但这种方法容易出错,而且后续VS更新Dockerfile时会覆盖你的修改:
- 把原来的
COPY *.sln ./改成COPY ../*.sln ./ - 同时后续复制项目文件的指令也要对应调整,比如原来的
COPY Test01.csproj ./要改成COPY ../Test01/Test01.csproj ./
(具体路径要根据你的项目结构调整)
但真心不推荐这个方法,毕竟VS自动生成的Dockerfile本来就是为解决方案根目录构建设计的,改了反而容易出其他问题。
为什么会报错?
当你在项目子目录执行docker build .时,Docker的构建上下文是当前项目目录,这个目录里没有.sln文件,所以COPY *.sln ./找不到任何源文件,就会抛出你看到的错误啦。
内容的提问来源于stack exchange,提问作者Run CMD
相关产品推荐
相关产品推荐

