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

3
我有两个Docker容器,一个带有Apache(+ PHP),另一个带有PostgreSQL(+ PostGIS,这是 PostgreSQL 数据库的空间扩展)。
PostGIS 有一个二进制文件(shp2pgsql)可以将 shapefile 数据转换为 SQL 指令。当我需要执行此操作时,我运行以下命令:
/usr/bin/shp2pgsql {...arguments...} filename.shp > insql.sql

在特定情况下,当用户上传shapefile(在apache+php容器中)时,我需要在PostgreSQL+PostGIS容器中运行shp2pgsql。
我已经尝试过:
- 将docker守护程序暴露给Apache docker容器,并使用docker exec命令调用二进制文件shp2pgsql,但是由于apache用户(调用docker exec的用户)没有权限,因此没有成功。 - 共享PostgreSQL容器中的“/usr/bin/”卷到Apache容器中,但没有成功,因为二进制文件(shp2pgsql)与其他库(在其他文件夹中)有依赖关系。
是否有一种优雅(或不优雅)且可行的方法来解决这个问题?还有其他的解决方案吗?
欢迎任何建议或想法。
1个回答

1

并不是特别优雅,也绝对不安全,但一种解决方案是在一个不同的、新的 postgres 容器中调用 shp2pgsql。从 apache 容器中进行调用,就像 this thread 所描述的那样。

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

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

同样,这些解决方案都不是很优雅,让我们看看是否有人能提出更好的方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接