docker 构建使用了错误的 Dockerfile 内容(错误?)
docker build uses wrong Dockerfile content (bug?)
多年来我一直在使用 docker,现在我发现了一个非常奇怪的行为:docker build
命令使用了一个 Docker 文件,这不是我拥有的文件。
查看下一篇日志:
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>
查看Docker文件如何使用
COPY build/libs/charmanderWarehouse-1.0.0-SNAPSHOT.jar /app
但是 docker build
失败
ERROR [3/3] COPY build/libs/charmanderPurchases-1.0.0-SNAPSHOT.jar /app
为什么要复制 charmanderPurchases?!!
更多提示:该文件失败(charmanderPurchases)用于前一个Docker兄弟项目中的文件,该文件是在一秒钟之前构建的(所有这些都是伪[=43=的一部分) ] .cmd 过程构建了一些图像)。
更多提示:我有一个解决方法。如果我使用
type Dockerfile | build -f - -t javiersedano/charmander-warehouse:test1 .
然后它按预期工作;此外,在这个解决方法之后,第一个命令也按预期工作......但是,失败的构建是兄弟项目的构建,因为 charmanderPurchases 试图 COPY charmanderWarehouse......WTF?!
看起来 Docker 文件内容本身正在被缓存或什么的,它正在重复使用以前的 Docker 文件。
环境:Docker Windows 3.6.0 桌面 Windows 10 使用 WSL2 后端。
Edit1:使用 4.0.1 进行测试但仍然失败。
有什么提示吗?有什么想法吗?
(最终解决方案见下面的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
编辑:
Docker文件内容未更新似乎是由于构建器未针对具有相同 size/timestamp 的文件更新上下文:
https://github.com/moby/buildkit/issues/1368
这是一个可能的解决方法:
docker builder prune
每次构建之间。
编辑 2,作者:Javier Sedano:
读取 github 线程后,问题如下:Docker 缓存 Docker 文件并使用时间戳和文件大小作为缓存的键。在我的例子中,Docker 文件仅在 purchases/warehouse... 上不同,它们都是 9 个字符长...所以 Docker 文件具有相同的大小。时间戳相同,因为它们是从 GitLab 下载的 .zip 文件。
解决方法(我已经测试了它们并且它们都对我有用,所以选择取决于其余的限制):
A.-使用cat Dockerfile | docker build -f - -t xxxx:tttt
B.-修改文件大小不一样(我不喜欢这个方案因为以后可能会再次冲突)
C.-在构建之前使用docker builder prune -f
。
多年来我一直在使用 docker,现在我发现了一个非常奇怪的行为:docker build
命令使用了一个 Docker 文件,这不是我拥有的文件。
查看下一篇日志:
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>
查看Docker文件如何使用
COPY build/libs/charmanderWarehouse-1.0.0-SNAPSHOT.jar /app
但是 docker build
失败
ERROR [3/3] COPY build/libs/charmanderPurchases-1.0.0-SNAPSHOT.jar /app
为什么要复制 charmanderPurchases?!!
更多提示:该文件失败(charmanderPurchases)用于前一个Docker兄弟项目中的文件,该文件是在一秒钟之前构建的(所有这些都是伪[=43=的一部分) ] .cmd 过程构建了一些图像)。
更多提示:我有一个解决方法。如果我使用
type Dockerfile | build -f - -t javiersedano/charmander-warehouse:test1 .
然后它按预期工作;此外,在这个解决方法之后,第一个命令也按预期工作......但是,失败的构建是兄弟项目的构建,因为 charmanderPurchases 试图 COPY charmanderWarehouse......WTF?!
看起来 Docker 文件内容本身正在被缓存或什么的,它正在重复使用以前的 Docker 文件。
环境:Docker Windows 3.6.0 桌面 Windows 10 使用 WSL2 后端。
Edit1:使用 4.0.1 进行测试但仍然失败。
有什么提示吗?有什么想法吗?
(最终解决方案见下面的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
编辑:
Docker文件内容未更新似乎是由于构建器未针对具有相同 size/timestamp 的文件更新上下文: https://github.com/moby/buildkit/issues/1368
这是一个可能的解决方法:
docker builder prune
每次构建之间。
编辑 2,作者:Javier Sedano:
读取 github 线程后,问题如下:Docker 缓存 Docker 文件并使用时间戳和文件大小作为缓存的键。在我的例子中,Docker 文件仅在 purchases/warehouse... 上不同,它们都是 9 个字符长...所以 Docker 文件具有相同的大小。时间戳相同,因为它们是从 GitLab 下载的 .zip 文件。
解决方法(我已经测试了它们并且它们都对我有用,所以选择取决于其余的限制):
A.-使用cat Dockerfile | docker build -f - -t xxxx:tttt
B.-修改文件大小不一样(我不喜欢这个方案因为以后可能会再次冲突)
C.-在构建之前使用docker builder prune -f
。