gpt4 book ai didi

.net-core - Dockerfile COPY ${source :-obj/Docker/publish} not finding the correct source after upgrade to 3. 1

转载 作者:行者123 更新时间:2023-12-05 03:51:35 24 4
gpt4 key购买 nike

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

ARG source

COPY ${source:-obj/Docker/publish} .

在从 .Net Core 2.2 升级到 3.1 之前,这是可行的。升级后,当我尝试部署时,出现以下错误:

COPY failed: stat /var/lib/docker/tmp/docker-builder609391151/obj/Docker/publish: no such file or directoryscript returned exit code 1

从我读到的内容来看,.Net Core 2.2 似乎编译到/obj/Docker/publish 目录中,但 .Net Core 3.1 编译到/bin/Release/netcoreapp3.1 目录中,但是源代码是仍然指向/obj/Docker/publish。我试图弄清楚源参数的定义位置,以及我应该如何更改它。

更新:

我决定完全不使用源代码,而是对构建路径进行硬编码。我将复制行更改为

COPY /var/lib/jenkins/jobs/fusion-core/branches/master/workspace/src/CustomerAPI/obj/Release/netcoreapp3.1 .

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

COPY failed: stat /var/lib/docker/tmp/docker-builder356954794/var/lib/jenkins/jobs/fusion-core/branches/master/workspace/src/CustomerAPI/obj/Release/netcoreapp3.1: no such file or directoryscript returned exit code 1

我不确定“/var/lib/docker/tmp/docker-builder356954794”来自哪里,或者为什么将它附加到我的路径前面,但它不存在。

仍然不确定如何解决这个问题。

最佳答案

部分调试建议,排名不分先后

默认值

${source:-obj/Docker/publish}bash syntax如果变量 source 已定义,则计算为变量的值,如果未定义,则计算为 obj/Docker/publish 的值。

I'm trying to figure out where the source argument is defined, and how I should change this.

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

发布目录

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

不要使用完整路径,它会改变每个构建。看到路径中的tmp/docker-builder356954794了吗?

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

COPY bin/Release/netcoreapp3.1/publish .

有趣的路径

I'm not sure where the "/var/lib/docker/tmp/docker-builder356954794" is coming from

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

其中一个是 /var/lib/docker/tmp/...

关于.net-core - Dockerfile COPY ${source :-obj/Docker/publish} not finding the correct source after upgrade to 3. 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62782800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com