问题描述
我在 golang 中有一个使用 buildmode 插件的代码。我在同一个图像 (goboring/golang:1.15.8b5) 中一个接一个地构建主程序和插件。运行主程序时,一旦它尝试加载插件,我就会收到错误消息:
E0319 14:27:38.417362 34123 daemon.go:639] loadvendorPlugins(): fail to load plugin /plugins/my_plugin.so: plugin.Open("/plugins/my_plugin"): plugin was built with a different version of package crypto/internal/boring
如果我将图像更改为 golang:1.15,则不会发生这种情况。知道为什么会发现一个包的不同版本,即使它们都构建在同一个映像中吗?为什么基础映像可能会对此产生影响?
解决方法
显然,在使用buildmode=plugin的时候,看到这个问题并不奇怪。解决方案是将标志 -trimpath
添加到 go build,如下所述:https://github.com/golang/go/issues/27751#issuecomment-593082117