Docker容器从另一个容器

时间:2015-12-01 13:05:44

标签: php apache docker postgis

我有两个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)与其他库(在其他文件夹中)有依赖关系。

有优雅(或没有)和可行的方法吗? 这个问题有其他替代方案吗?

任何建议或想法都非常受欢迎。

1 个答案:

答案 0 :(得分:0)

不是很优雅,绝对不安全,但解决方案是在另一个新的postgres容器中调用shp2pgsql。从apache容器。像this thread中描述的那样。

另一个选择是使用micro-service-y并创建一个基于postgres的新图像,并包含一个简单的脚本或二进制文件,它将通过某些文件公开执行shp2pgsql的结果( REST?)接口,然后由apache / php流式传输。这假设您只需要shp2pgsql二进制文件及其依赖项,而不是postgres数据。否则,您可以将此自定义服务放入与原始数据库相同的容器中,即使违反了docker对每个容器一个进程的首选项。

第三种方法实际上可能是将所需的二进制文件安装到apache容器上。

同样,这些解决方案对我来说都不是很优雅,让我们看看是否有人提供更好的东西。