У меня есть два док-контейнера, один с 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) имеет зависимости с другими библиотеками (в других папках).
Есть ли элегантный (или нет) и жизнеспособный способ сделать это?
Есть ли другие альтернативы для этой проблемы?
Любые предложения или идеи приветствуются.
Не очень элегантно, определенно небезопасно, но решением было бы вызвать shp2pgsql
в другом, новом контейнере postgres. Из контейнера apache. Нечто подобное описано в эта тема.
Другой вариант — перейти на micro-service-y и создать новое изображение, которое будет основано на postgres и содержать простой сценарий или двоичный файл, который будет отображать результат выполнения shp2pgsql
через некоторый (REST?) интерфейс, который, в свою очередь, будет передаваться через apache / php. Это предполагает, что вам нужно только shp2pgsql
двоичный файл и его зависимости, а не данные postgres. В противном случае вы могли бы поместить этот пользовательский сервис в тот же контейнер, что и исходная база данных, даже если он нарушил предпочтения докера по одному процессу на контейнер.
Третий подход может заключаться в установке необходимых двоичных файлов в контейнер apache.
Опять же, ни одно из решений не очень элегантно для меня, давайте посмотрим, придет ли кто-нибудь с чем-то лучше.
Других решений пока нет …