#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», нет, обычно вы должны запускать его где-то в другом месте.