在 docker 容器中运行 go 二进制文件时找不到空间扩展



我正在设置一个空间数据库(SQLite + Spatialite 扩展(和一个在 docker 容器中运行的关联 Go 程序,该程序查询数据库并返回数据。

Go-spatialite,在我的理解中将在运行时动态加载空间库以查询数据库。在本地运行 Go 程序并使用 Postman 查询服务时,一切运行良好。

但是,在使用容器时,Go 程序无法找到空间扩展:

"error":"shaxbee/go-spatialite: spatialite extension not found."

我使用go-spatialite(shaxbee(包和database/sql包。我已经在本地安装了空间石。

我像这样打开数据库连接:

db, err := sql.Open("spatialite", "path/to/my/db")
if err != nil {
logVar.WithError(err).Fatal("Impossible to open database")
}
if err := db.Ping(); err != nil {
logVar.WithError(err).Fatal("Cannot connect to database")
}

我使用这个 Dockerfile 来调整我的文件(基于 alpine-glibc(,以便在映像构建期间安装 Spatialite 库。根据空间石包,它寻找不同的空间库并加载它。

在容器中签入/usr/local/lib/时,库位于其中:

libspatialite.a
libspatialite.la
libspatialite.so
libspatialite.so.7
libspatialite.so.7.1.0
libsqlite3.so
libsqlite3.so.0
libsqlite3.so.0.8.6

在我看来,该程序不知道从哪里获取库。你有什么想法吗?

谢谢

Dockerfile设置了一个libspatialite版本4.3.0a的容器。

...
RUN wget "http://www.gaia-gis.it/gaia-sins/freexl-1.0.4.tar.gz" && tar zxvf freexl-1.0.4.tar.gz && cd freexl-1.0.4 && ./configure && make && make install
RUN wget "http://www.gaia-gis.it/gaia-sins/libspatialite-4.3.0a.tar.gz" && tar zxvf libspatialite-4.3.0a.tar.gz && cd libspatialite-4.3.0a && ./configure && make && make install
RUN wget "http://www.gaia-gis.it/gaia-sins/readosm-1.1.0.tar.gz" && tar zxvf readosm-1.1.0.tar.gz && cd readosm-1.1.0 && ./configure && make && make install
RUN wget "http://www.gaia-gis.it/gaia-sins/spatialite-tools-4.3.0.tar.gz" && tar zxvf spatialite-tools-4.3.0.tar.gz && cd spatialite-tools-4.3.0 && ./configure && make && make install
...

从最近提交到go-spatialite的一个,我们可以看到所需的版本是5.

var LibNames = []entrypoint{
{"mod_spatialite", "sqlite3_modspatialite_init"},
{"libspatialite.so", "sqlite3_modspatialite_init"},
{"libspatialite.so.5", "spatialite_init_ex"},
{"libspatialite.so", "spatialite_init_ex"},
}

(空间网(

使用版本 5 为libspatialite的容器来解决问题。

最新更新