在 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 脚本

windows下docker安装nginx

Docker容器简单部署nginx

NGINX 反向代理到运行 Web 应用程序的 docker 容器

nginx 反向代理可以访问多个 docker 容器

Centos7上运行Docker容器