我正在设置一个 Spatialite 数据库(SQLite + Spatialite 扩展)和一个在查询数据库并返回数据的 docker 容器中运行的关联 Go 程序。
Go-spatialite,在我的理解中会在运行时动态加载spatialite库,以便查询数据库。在本地运行 Go 程序并使用 Postman 查询服务一切正常。
但是,在使用容器时,Go 程序无法找到 spatialite 扩展:
"error":"shaxbee/go-spatialite: spatialite extension not found."
我使用 go-spatialite (shaxbee) package和 database/sql
包。我已经在本地安装了 Spatialite。
我这样打开数据库连接:
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 库。根据Spatialite package , 它寻找不同的空间库并加载它。
检查容器中的/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"},
}
( spatialite.go )
使用带有 libspatialite
版本 5 的容器来解决您的问题。
关于sqlite - 在 docker 容器中运行 go binary 时找不到 Spatialite 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51837129/