首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dockerfile使用错误的Dockerfile内容(bug?)

Dockerfile使用错误的Dockerfile内容(bug?)
EN

Stack Overflow用户
提问于 2021-09-14 07:45:11
回答 1查看 941关注 0票数 1

我已经使用docker多年了,现在我发现了一种非常奇怪的行为:docker build命令使用的是一个不是我所拥有的Dockerfile。

见下一个日志:

代码语言:javascript
复制
PS D:\reposNovabase\charmander\charmanderWarehouse> type Dockerfile  
FROM adoptopenjdk/openjdk11-openj9:jdk-11.0.11_9_openj9-0.26.0-alpine
WORKDIR /app
COPY build/libs/charmanderWarehouse-1.0.0-SNAPSHOT.jar /app
EXPOSE 8083
CMD ["java", "-Xmx70m", "-jar", "charmanderWarehouse-1.0.0-SNAPSHOT.jar"]
PS D:\reposNovabase\charmander\charmanderWarehouse> docker build -f Dockerfile -t javiersedano/charmander-warehouse:test1 .
[+] Building 0.2s (7/7) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                                  0.0s 
 => => transferring dockerfile: 32B                                                                                                                                   0.0s 
 => [internal] load .dockerignore                                                                                                                                     0.0s 
 => => transferring context: 2B                                                                                                                                       0.0s 
 => [internal] load metadata for docker.io/adoptopenjdk/openjdk11-openj9:jdk-11.0.11_9_openj9-0.26.0-alpine                                                           0.0s 
 => [1/3] FROM docker.io/adoptopenjdk/openjdk11-openj9:jdk-11.0.11_9_openj9-0.26.0-alpine                                                                             0.0s 
 => [internal] load build context                                                                                                                                     0.0s 
 => => transferring context: 57B                                                                                                                                      0.0s 
 => CACHED [2/3] WORKDIR /app                                                                                                                                         0.0s 
 => ERROR [3/3] COPY build/libs/charmanderPurchases-1.0.0-SNAPSHOT.jar /app                                                                                           0.0s 
------
 > [3/3] COPY build/libs/charmanderPurchases-1.0.0-SNAPSHOT.jar /app:
------
failed to compute cache key: "/build/libs/charmanderPurchases-1.0.0-SNAPSHOT.jar" not found: not found
PS D:\reposNovabase\charmander\charmanderWarehouse> 

查看Dockerfile如何使用

代码语言:javascript
复制
COPY build/libs/charmanderWarehouse-1.0.0-SNAPSHOT.jar /app

但是docker build失败了

代码语言:javascript
复制
ERROR [3/3] COPY build/libs/charmanderPurchases-1.0.0-SNAPSHOT.jar /app

它为什么要复制charmanderPurchases!

更多提示:该文件正在失败(charmanderPurchases)用于兄弟项目中的一个以前的Dockerfile中,该项目在一秒钟前构建(所有这些都是构建一些图像的伪CI .cmd进程的一部分)。

更多提示:我有个解决办法。如果我用

代码语言:javascript
复制
type Dockerfile | build -f - -t javiersedano/charmander-warehouse:test1 .

然后,它按预期工作;此外,在完成此解决方案之后,第一个命令也可以按照预期的方式工作。但是,失败的构建是兄弟项目的构建,因为charmanderPurchases试图复制charmanderWarehouse.见鬼?!

看起来Dockerfile内容本身正在被缓存,并且它正在重用以前的Dockerfile。

环境:在Windows 10上使用WSL2后端的DockerDesktopforWindows3.6.0。

Edit1:用4.0.1进行测试,但仍然失败。

有什么暗示吗?有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-14 09:57:46

(最终解决方案见下面的edit2 )

关于您的错误,它可能来自.dockerignore文件(不包括charmanderWarehouse-1.0.0-SNAPSHOT.jar或其父文件(可能是build) )。

如果它不是来自.dockerignore,您可以尝试选择--no-cache=true来构建您的映像,而不需要缓存重用。

docker build --no-cache=true -f Dockerfile -t javiersedano/charmander-warehouse:test1 .

这里有更多信息:https://docs.docker.com/engine/reference/commandline/build/#options

编辑:

没有更新的Dockerfile内容似乎是由于构建器没有更新具有相同大小/时间戳的文件的上下文:https://github.com/moby/buildkit/issues/1368

下面是一个可能的解决办法:每个构建之间的docker builder prune

编辑2,Javier:

读取github线程后,问题如下: Docker缓存Dockerfile并使用时间戳和文件大小作为chache的键。在我的例子中,Dockerfiles只在采购/仓库上有不同的地方.都是9个字符-长.所以Dockerfile的大小是一样的。时间戳是相同的,因为它们是作为.zip文件从GitLab下载的。

解决办法(我已经测试过它们,它们都为我工作,所以选择取决于其余的约束):

A.-使用cat Dockerfile | docker build -f - -t xxxx:tttt

修改文件不具有相同的大小(我不喜欢这个解决方案,因为它可能在未来再次冲突)。

建设前使用docker builder prune -f

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69173822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档