我有两个docker容器,一个使用Apache(+ PHP),另一个使用PostgreSQL(+ PostGIS,PostgreSQL数据库的空间扩展)。
PostGIS有一个二进制文件(shp2pgsql)来转换SQL指令中的shapefile数据。当我需要这样做时,我运行以下命令:
/usr/bin/shp2pgsql {...arguments...} filename.shp > insql.sql
在特定情况下,当用户上传shapefile时(在apache + php容器中),我需要在PostgreSQL + PostGIS容器中运行shp2pgsql。
我已经尝试过了:
将docker守护程序暴露给Apache docker容器并使用docker exec命令调用二进制shp2pgsql,但没有成功,因为apache用户(调用docker exec)没有权限。
< / LI>从PostgreSQL容器到Apache容器共享卷“/ usr / bin /”,但没有成功,因为二进制文件(shp2pgsql)与其他库(在其他文件夹中)有依赖关系。
有优雅(或没有)和可行的方法吗? 这个问题有其他替代方案吗?
任何建议或想法都非常受欢迎。
答案 0 :(得分:0)
不是很优雅,绝对不安全,但解决方案是在另一个新的postgres容器中调用shp2pgsql
。从apache容器。像this thread中描述的那样。
另一个选择是使用micro-service-y并创建一个基于postgres的新图像,并包含一个简单的脚本或二进制文件,它将通过某些文件公开执行shp2pgsql
的结果( REST?)接口,然后由apache / php流式传输。这假设您只需要shp2pgsql
二进制文件及其依赖项,而不是postgres数据。否则,您可以将此自定义服务放入与原始数据库相同的容器中,即使违反了docker对每个容器一个进程的首选项。
第三种方法实际上可能是将所需的二进制文件安装到apache容器上。
同样,这些解决方案对我来说都不是很优雅,让我们看看是否有人提供更好的东西。