在 nginx docker 容器中运行 python 脚本
Posted
技术标签:
【中文标题】在 nginx docker 容器中运行 python 脚本【英文标题】:Running a python script inside an nginx docker container 【发布时间】:2022-01-13 15:58:41 【问题描述】:我正在使用 nginx 来提供我的一些文档。我有一个 python 脚本可以为我处理这些文档。我不想预处理文档,然后在构建 docker 容器之前添加它们,因为这些文档可能会变得非常大并且数量会增加。我想要的是在 nginx 容器中运行我的 python(和 bash)脚本,并让 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
但我不确定这是否是一种好习惯。请告诉我运行我的预处理脚本的最佳方式。
【问题讨论】:
要正确回答我们需要知道这些容器在哪里运行? Docker compose、swarm、kubernetes,还有别的吗?容器编排器很可能提供了一个既定的模式来做到这一点。 构建使用docker build -t docs:v1 .
运行使用:docker run -d --name=docs-web -p 3009:80 docs:v1
【参考方案1】:
您可以使用bind mount 将数据从您的主机系统注入到容器中。这将在主机数据更改时自动更新。如果你在 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
,尽管它作为调试工具非常有用。从概念上讲,将容器视为与流程相同可能会有所帮助。如果你问“我可以在 Nginx 进程中运行这个 Python 脚本吗”,不,你通常应该在其他地方运行它。
【讨论】:
以上是关于在 nginx docker 容器中运行 python 脚本的主要内容,如果未能解决你的问题,请参考以下文章
在 nginx docker 容器中运行 python 脚本