Docker构建执行go build -mod vendor仍遇fsnotify包依赖不一致错误
vendor/modules.txt 未同步更新
你只提交了vendor/fsnotify目录,但Go的vendoring机制依赖vendor/modules.txt来记录显式依赖的标记。手动添加单个依赖目录不会更新这个文件,必须执行go mod vendor重新生成完整的vendor目录和modules.txt,才能让Go识别到该依赖的显式声明。Go版本环境不一致
本地生成vendor目录的Go版本,和Jenkins构建环境中的Go版本可能存在差异。不同Go版本对vendoring的处理逻辑(比如modules.txt的生成规则)有细微区别,部分旧版本可能存在显式依赖标记的bug,导致构建时校验失败。Docker构建上下文不完整
Docker构建时的上下文可能没包含最新的vendor目录或modules.txt。比如.gitignore规则误排除了modules.txt,或者Jenkins拉取代码时缓存了旧版本,导致构建时使用的还是未更新的文件。go.mod变更后未重新生成vendor
如果提交vendor/fsnotify后,go.mod又有过修改(比如调整依赖版本),但没重新执行go mod vendor,此时modules.txt和go.mod的依赖声明就会不一致。要确保每次修改go.mod后都重新生成完整的vendor目录。显式依赖添加不规范
如果github.com/fsnotify/fsnotify原本是隐式依赖,后来被你手动添加到go.mod,但go mod vendor没正确识别这个变更。先执行go get github.com/fsnotify/fsnotify@v1.6.0确认依赖已正确写入go.mod,再重新执行go mod vendor生成完整的vendor文件。
内容的提问来源于stack exchange,提问作者baris

