多次构建的 Docker 镜像, WORKDIR XXX 这个指令生成的 Layer 的 Hash 都不太相同?

259 天前
 evax

使用云效流水线构建

使用多阶段构建,dockerfile 大概为:

# stage1
from xxx as builder
yarn build

# stage2
from node
workdir xxx

copy --from=builder xxxx xxx

通过对比生成的镜像层信息,发现每次 stage2 的 workdir 这个指令的 hash 都不同,有点难以理解。 如果这个指令每次不同,就会造成后面 layer hash 变化,推送镜像时就无法利用 layer 缓存,每次都要全部推送?

634 次点击
所在节点    Docker
8 条回复
night98
259 天前
云效的老 bug 了,几年前都提过,是 docker 提供的 buildkit 的问题,原因是在 linux 下 git 会刷新文件的时间导致 hash 不一致(纯记忆,大概是这么个意思)
就导致了多层构建,每次都得从头推
evax
258 天前
@night98 亏我还费老多心思去优化各个 layer 尽量缓存,这看起来没法玩了呀
night98
257 天前
@evax #2 云效构建好像可以用自己的机器去当节点弄,这么搞应该是可以走缓存的,你如果直接用他提供的流水线功能,那就只能慢慢等了
night98
257 天前
主要云效感觉他们内部压根不是很上心,各种东西都是做了但是没做好,就完成个 7-80 的那样子
evax
257 天前
@night98 是用的自己的构建节点,所以才很奇怪。
night98
257 天前
@evax #5 用自己的节点然后不要用他那套构建流程试试,我的意思是你用自己的构建节点然后自己写 shell 去构建,这样应该是正常的
night98
257 天前
@evax #5 他那套构建流程如果你直接用你的机器当节点的话,我记得应该是拉了几个镜像过来然后跑构建
night98
257 天前
@evax #5 实际应该还是用的 docker buildkit 那套,还是会出问题,所以只能直接执行 shell 去搞

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1021030

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX