Контейнер Docker вызывает двоичный файл из другого контейнера

У меня есть два док-контейнера, один с Apache (+ PHP) и другой с PostgreSQL (+ PostGIS, пространственное расширение для базы данных PostgreSQL).

PostGIS имеет двоичный файл (shp2pgsql) для преобразования данных шейп-файла в инструкции SQL. Когда мне нужно сделать это, я запускаю следующую команду:

/usr/bin/shp2pgsql {...arguments...} filename.shp > insql.sql

В конкретном случае, когда пользователь загружает шейп-файл (в контейнере apache + php), мне нужно запустить shp2pgsql в контейнере PostgreSQL + PostGIS.

Я уже попробовал:

  • Выставьте демон docker в контейнер докера Apache и вызовите двоичный файл shp2pgsql с помощью команды docker exec, но безуспешно, потому что у пользователя apache (который вызывает docker exec) нет разрешения на это.

  • Разделите том «/ usr / bin /» из контейнера PostgreSQL в контейнер Apache, но безуспешно, потому что двоичный файл (shp2pgsql) имеет зависимости с другими библиотеками (в других папках).

Есть ли элегантный (или нет) и жизнеспособный способ сделать это?
Есть ли другие альтернативы для этой проблемы?

Любые предложения или идеи приветствуются.

3

Решение

Не очень элегантно, определенно небезопасно, но решением было бы вызвать shp2pgsql в другом, новом контейнере postgres. Из контейнера apache. Нечто подобное описано в эта тема.

Другой вариант — перейти на micro-service-y и создать новое изображение, которое будет основано на postgres и содержать простой сценарий или двоичный файл, который будет отображать результат выполнения shp2pgsql через некоторый (REST?) интерфейс, который, в свою очередь, будет передаваться через apache / php. Это предполагает, что вам нужно только shp2pgsql двоичный файл и его зависимости, а не данные postgres. В противном случае вы могли бы поместить этот пользовательский сервис в тот же контейнер, что и исходная база данных, даже если он нарушил предпочтения докера по одному процессу на контейнер.

Третий подход может заключаться в установке необходимых двоичных файлов в контейнер apache.

Опять же, ни одно из решений не очень элегантно для меня, давайте посмотрим, придет ли кто-нибудь с чем-то лучше.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]