Добавить PHP функциональность к Docker Compose Python / Flask Container - PullRequest
0 голосов
/ 21 января 2020

У меня есть Flask веб-приложение на основе встроенного Docker Создание с использованием Gunicorn, Redis, Celery и Postgres. Приложению необходимо вызвать стороннюю математическую функцию, которая написана на PHP и будет размещена в структуре приложения в виде файла PHP. К сожалению, невозможно переписать эту функцию в Python. Поэтому мне нужно, чтобы PHP работал внутри моего основного контейнера веб-приложения, чтобы я мог получить доступ к файлу. У меня готов соответствующий код подпроцесса, но я не могу понять, как запустить PHP в соответствующем контейнере. Важные файлы:

docker -compose.yml:

version: '2'
 services:
   postgres:
     image: 'postgres:9.5'
     restart: always
     env_file:
       - '.env'
     volumes:
       - 'postgres:/var/lib/postgresql/data'
     ports:
       - '5432:5432'

   redis:
     image: 'redis:3.0-alpine'
     command: redis-server --requirepass devpassword
     volumes:
       - 'redis:/var/lib/redis/data'
     ports:
       - '6379:6379'

   web:
     image: my_app_web:rv19
     build: .
     restart: always
     command: >
       gunicorn -c "python:config.gunicorn" --reload --timeout 5 "my_app.app:create_app()"
     env_file:
       - '.env'
     volumes:
       - '.:/my_app'
     ports:
       - '8000:8000'
     depends_on:
       - postgres
     links:
       - redis
       - celery

   celery:
     build: .
     command: celery worker -B -l info -A my_app.blueprints.contact.tasks
     env_file:
       - '.env'
     volumes:
       - '.:/my_app'
     links:
       - redis
     depends_on:
       - redis

 volumes:
   postgres:
   redis:

И файл Docker:

FROM python:3.7-slim
MAINTAINER AAAAA AAAAA <aaaa@aaaa.a>

RUN apt-get update && apt-get install -qq -y \
  build-essential libpq-dev --no-install-recommends

ENV INSTALL_PATH /my_app
RUN mkdir -p $INSTALL_PATH

WORKDIR $INSTALL_PATH

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .
RUN pip install --editable .

CMD gunicorn -c "python:config.gunicorn" "my_app.app:create_app()"

.env file:

COMPOSE_PROJECT_NAME=my_app

POSTGRES_USER=my_app
POSTGRES_PASSWORD=devpassword

PYTHONUNBUFFERED=true

Проверка доступности PHP в приложении:

php = os.system('php --version')
print(php)

возвращает:

php: not found
web_1       | 32512

Может кто-нибудь, пожалуйста, посоветуйте, как я могу запустить PHP рядом с Python в моем основном веб-контейнере, чтобы я мог вызывать функцию из моего Python кода?

1 Ответ

0 голосов
/ 21 января 2020

Если вам не нужно обслуживать файл php и выполнять его только через cli, просто установите php в контейнере. Вы можете сделать это в своем Dockerfile, добавив php в apt-get команда:

RUN apt-get update && apt-get install -qq -y \
  build-essential libpq-dev php --no-install-recommends
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...