Запуск скрипта python внутри контейнера nginx docker

#python #docker #nginx

#python #docker #nginx

Вопрос:

Я использую nginx для обслуживания некоторых моих документов. У меня есть скрипт на python, который обрабатывает эти документы для меня. Я не хочу предварительно обрабатывать документы, а затем добавлять их до создания контейнера docker, поскольку эти документы могут стать довольно большими, и их число увеличивается. Я хочу запустить свои скрипты python (и bash) внутри контейнера nginx и заставить nginx просто обслуживать эти документы. Есть ли способ сделать это без предварительной обработки документов перед сборкой контейнера? Я попытался выполнить RUN python3 process_docs.py , но продолжаю видеть следующую ошибку:

 /bin/sh: 1: python: not found
The command '/bin/sh -c python process_docs.py' returned a non-zero code: 127
 

Есть ли способ получить python3 в контейнере Nginx docker? Я думал об установке python3 с помощью:

 apt-get update -y
apt-get install python3.6 -y
 

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

Комментарии:

1. Чтобы правильно ответить, нам нужно знать, где работают эти контейнеры? Docker compose, swarm, kubernetes, что-то еще? Оркестратор контейнера, скорее всего, предлагает установленный шаблон для этого.

2. Сборка с использованием docker build -t docs:v1 . Запуск с использованием: docker run -d --name=docs-web -p 3009:80 docs:v1

Ответ №1:

Вы можете использовать привязку для ввода данных из вашей хост-системы в контейнер. Это будет автоматически обновляться при изменении данных хоста. Если вы запускаете это в Docker Compose, синтаксис выглядит следующим образом

 version: '3.8'
services:
  nginx:
    image: nginx
    volumes:
      - ./html:/usr/share/nginx/html
      - ./data:/usr/share/nginx/html/data
    ports:
      - '8000:80'  # access via http://localhost:8000
 

В этом примере настройки html каталог содержит ваши статические ресурсы (проверенные в системе управления версиями), а data каталог содержит сгенерированные данные. Вы можете восстановить данные с хоста вне Docker так же, как если бы Docker не был задействован

 # on the host
. venv/bin/activate
./regenerate_data.py --output-directory ./data
 

Вам не нужно docker exec в обычной работе, хотя это может быть чрезвычайно полезно в качестве инструмента отладки. Концептуально это может помочь представить контейнер как идентичный процессу; если вы спросите: «Могу ли я запустить этот скрипт Python внутри процесса Nginx», нет, обычно вы должны запускать его где-то в другом месте.