gpt4 book ai didi

docker - 无法打开 Go 插件

转载 作者:行者123 更新时间:2023-12-04 13:07:30 25 4
gpt4 key购买 nike

我总是收到以下错误:

plugin.Open("./plugin"): plugin was built with a different version of package internal/cpu
我对这个问题做了一些研究,它清楚地指出插件是使用与加载插件的应用程序不同的上下文版本(golang 版本或依赖项)构建的。
我在 Docker 下运行了一个最小的测试,使用完全相同的 Go 编译器版本和相同的图像来构建插件和应用程序,但我仍然遇到相同的错误。
如果有人能指出我的故障在哪里,或者我应该检查什么来防止这个错误,我很感激。
值得一提的是,我使用的是 MacOS,但我在 Docker 容器下运行测试。实际上,我能够在 Docker 下为第三方产品构建和运行 golang 插件。
这是代码:
// main.go

package main

import (
"fmt"
"plugin"
)

func main() {
path := "./plugin.so"
p, err := plugin.Open(path)
if err != nil {
fmt.Printf("unable to load plugin at %s.\n%v", path, err)
}

symbol, err := p.Lookup("Create")
if err != nil {
fmt.Printf("unable to find Create() function in plugin %s.\n%v", path, err)
}

createMethod, ok := symbol.(func()interface{})
if !ok {
fmt.Printf("Create is not a function in plugin %s", path)
}
createMethod()
}
// plugin.go

package main

func Create() interface{} {
return nil
}
//Dockerfile

FROM golang:1.13.5 as pluginBuilder

WORKDIR /app

COPY . .

RUN go build --buildmode=plugin --trimpath -o /plugin.so plugin.go

FROM golang:1.13.5 as serverBuilder
WORKDIR /app

COPY . .

RUN go build -o /server main.go

FROM debian:stable AS server

WORKDIR /app
COPY --from=pluginBuilder /plugin.so .
COPY --from=serverBuilder /server .

RUN /app/server
谢谢

最佳答案

您正在使用 -trimpath构建插件时的选项,而不是构建应用程序时的选项。编辑 docker 文件,以便两个版本都使用 -trimpath (或两者都不做)然后应用程序将运行(它在我的机器上运行)。
我猜测为什么会导致这个问题是 trimpath “从编译的可执行文件中删除所有文件系统路径”,因此当运行时 verifies versions它找出路径中的差异。
这是对我有用的 dockerfile(复制了原始问题;唯一的变化是将 -trimpath 添加到第二个 go build ):

FROM golang:1.13.5 as pluginBuilder

WORKDIR /app

COPY . .

RUN go build --buildmode=plugin --trimpath -o /plugin.so plugin.go

FROM golang:1.13.5 as serverBuilder
WORKDIR /app

COPY . .

RUN go build --trimpath -o /server main.go

FROM debian:stable AS server

WORKDIR /app
COPY --from=pluginBuilder /plugin.so .
COPY --from=serverBuilder /server .

RUN /app/server

关于docker - 无法打开 Go 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68714827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com