php - Docker 容器从另一个容器调用二进制文件

标签 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 的人)没有权限。

  • 将卷“/usr/bin/”从 PostgreSQL 容器共享到 Apache 容器,但没有成功,因为二进制文件 (shp2pgsql) 与其他库(在其他文件夹中)有依赖关系。

    <

是否有一种优雅(或不)可行的方法来做到这一点? 这个问题还有其他替代方案吗?

我们非常欢迎任何建议或想法。

最佳答案

不是很优雅,绝对不安全,但解决方案是在不同的新 postgres 容器中调用 shp2pgsql。来自 apache 容器。类似于 this thread 中描述的内容.

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

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

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

关于php - Docker 容器从另一个容器调用二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34021182/

相关文章:

php - 我想将服务器的当前日期与 mySQL 数据库中存储的日期进行比较

php - UTF-8贯穿始终

javascript - 单击按钮时如何让用户下载多个文件?

Selenium 节点 docker 图像 NODE_MAX_SESSION 和 NODE_MAX_INSTANCES 环境变量

docker - 如何增加docker容器的预分配内存?

php - 如何确定 CSV 文件字段是制表符分隔还是逗号分隔?

php - IIS 上的 MSSQL 和 PHP 5.3.5 之间的连接不起作用

javascript - Datepicker 在创建时不工作,它动态使用 javascript

apache - 如何通过htaccess将目录中的所有文件重定向到root中的另一个

java - 测试容器 : ignore parent `EXPOSE` instruction from Dockerfile