.net core Dockerfile副本${source:-obj/Docker/publish}升级到3.1后找不到正确的源

.net core Dockerfile副本${source:-obj/Docker/publish}升级到3.1后找不到正确的源,.net-core,dockerfile,.net Core,Dockerfile,我正在使用Jenkins构建和部署一个.Net核心微服务应用程序。对于每个微服务,我都在构建一个docker容器。我的dockerfile中包含以下内容: 精氨酸源 复制${source:-obj/Docker/publish} 在从.NETCore2.2升级到3.1之前,这是有效的。升级后,当我尝试部署时,出现以下错误: 复制失败:stat/var/lib/docker/tmp/docker-builder609391151/obj/docker/publish:没有这样的文件或目录 脚本返回

我正在使用Jenkins构建和部署一个.Net核心微服务应用程序。对于每个微服务,我都在构建一个docker容器。我的dockerfile中包含以下内容:

精氨酸源

复制${source:-obj/Docker/publish}

在从.NETCore2.2升级到3.1之前,这是有效的。升级后,当我尝试部署时,出现以下错误:

复制失败:stat/var/lib/docker/tmp/docker-builder609391151/obj/docker/publish:没有这样的文件或目录 脚本返回退出代码1

据我所知,它看起来像是.Net Core 2.2编译到了/obj/Docker/publish目录,但是.Net Core 3.1编译到了/bin/Release/netcoreapp3.1目录,但是源代码仍然指向/obj/Docker/publish。我试图找出源参数的定义位置,以及应该如何更改

更新:

我决定完全不使用源代码,而是硬编码构建路径。我把复印行改为

复制/var/lib/jenkins/jobs/fusion-core/branchs/master/workspace/src/CustomerAPI/obj/Release/netcoreapp3.1

当我尝试构建docker容器时,仍然会遇到一个错误

复制失败:stat/var/lib/docker/tmp/docker-builder356954794/var/lib/jenkins/jobs/fusion-core/branchs/master/workspace/src/CustomerAPI/obj/Release/netcoreapp3.1:没有这样的文件或目录 脚本返回退出代码1

我不确定“/var/lib/docker/tmp/docker-builder356954794”是从哪里来的,也不确定它为什么会附加到我路径的前面,但它不存在


仍然不知道如何解决这个问题。

一些调试建议没有明确的顺序

默认值
${source:-obj/Docker/publish}
如果定义了变量
source
,则计算为变量值;如果未定义,则计算为变量
obj/Docker/publish

我试图找出
source
参数的定义位置,以及应该如何更改

如果找不到将其定义为另一个值的任何内容,则表示正在使用默认值
obj/Docker/publish

发布目录 3.1仍然使用
publish
目录,但它将位于
bin/Release/netcoreapp3.1/publish
。使用
运行find-type d-iname publish
查找容器中的发布目录

不要使用完整路径,它将更改每个构建。请参阅路径中的
tmp/docker-builder356954794

COPY
命令根据机器中的路径(docker容器外部)使用相对文件。因此,请使用相对于上下文目录(或
Dockerfile
)所在位置的路径。如果dockerfile位于
/var/lib/jenkins/jobs/fusion core/branchs/master/workspace/src/CustomerAPI/dockerfile
,并且您机器上的发布目录位于
/var/lib/jenkins/jobs/fusion core/branchs/master/workspace/src/CustomerAPI/bin/Release/netcoreapp3.1/publish
,则使用如下的
复制
命令:

COPY bin/Release/netcoreapp3.1/publish .
有趣的路径 我不确定“/var/lib/docker/tmp/docker-builder356954794”来自哪里

容器需要将文件从一个目录(在主机中)共享到另一个目录(在容器中)。根据容器技术,它使用一个或多个文件系统或文件目录


其中之一是
/var/lib/docker/tmp/…

嗯,我现在无法测试这个问题,但我将标记您的答案为解决它,因为您回答了我的问题,并让我走上了正确的轨道。谢谢