【发布时间】:2020-07-29 16:55:59
【问题描述】:
总结问题:
Python 包基本上在批处理文件夹中打开 PDF,读取每个 PDF 的第一页,匹配关键字,并将兼容的 PDF 转储到源文件夹中以供 OCR 脚本启动。获取所有 PDF 的第一个脚本是 MainBankClass .py。我正在尝试使用 docker-compose 文件将所有这些 python 脚本包含在同一 network 和 volume 下,以便每个 OCR 脚本在预处理完成。 This link 是迄今为止最接近实现目标的,但似乎我错过了其中的某些部分。调用不同OCR脚本的过程是由runpy.run_path(path_name='ChaseOCR.py')实现的,因此这些脚本在__init__.py的同一目录下。这是文件系统结构:
BankStatements
┣ BankofAmericaOCR
┃ ┣ BancAmericaOCR.py
┃ ┗ Dockerfile.bankofamerica
┣ ChaseBankStatementOCR
┃ ┣ ChaseOCR.py
┃ ┗ Dockerfile.chase
┣ WellsFargoStatementOCR
┃ ┣ Dockerfile.wellsfargo
┃ ┗ WellsFargoOCR.py
┣ BancAmericaOCR.py
┣ ChaseOCR.py
┣ Dockerfile
┣ WellsFargoOCR.py
┣ __init__.py
┗ docker-compose.yml
到目前为止我所做的尝试:
在 docker-compose.yml 中:
version: '3'
services:
mainbankclass_container:
build:
context: '.'
dockerfile: Dockerfile
volumes:
- /Users:/Users
#links:
# - "chase_container"
# - "wellsfargo_container"
# - "bankofamerica_container"
chase_container:
build: .
working_dir: /app/ChaseBankStatementOCR
command: ./ChaseOCR.py
volumes:
- /Users:/Users
bankofamerica_container:
build: .
working_dir: /app/BankofAmericaOCR
command: ./BancAmericaOCR.py
volumes:
- /Users:/Users
wellsfargo_container:
build: .
working_dir: /app/WellsFargoStatementOCR
command: ./WellsFargoOCR.py
volumes:
- /Users:/Users
每个银行文件夹下的每个 dockerfile 都是相似的,除了 CMD 会相应地更改。例如,在 ChaseBankStatementOCR 文件夹中:
FROM python:3.7-stretch
WORKDIR /app
COPY . /app
CMD ["python3", "ChaseOCR.py"] <---- changes are made here for the other two bank scripts
最后一个元素是每个文件夹之外的 Dockerfile:
FROM python:3.7-stretch
WORKDIR /app
COPY ./requirements.txt ./
RUN pip3 install --upgrade pip
RUN pip3 install -r requirements.txt
RUN pip3 install --upgrade PyMuPDF
COPY . /app
COPY ./ChaseOCR.py /app
COPY ./BancAmericaOCR.py /app
COPY ./WellsFargoOCR.py /app
EXPOSE 8080
CMD ["python3", "MainBankClass.py"]
运行docker-compose build后,容器和网络搭建成功。当我运行docker run -v /Users:/Users: python3 python3 ~/BankStatementsDemoOCR/BankStatements/MainBankClass.py 时发生错误,错误消息是 FileNotFoundError: [Errno 2] No such file or directory: 'BancAmericaOCR.py'
我假设容器没有 BancAmericaOCR.py,但我在同一个网络下编写了每个 .py 文件,我认为 links 不是一个好习惯,因为 docker 建议使用 networks @ 987654322@。我在这里想念什么?任何帮助深表感谢。提前致谢。
【问题讨论】:
-
由于 Docker 在设计上将容器文件系统与主机隔离开来,因此不太适合专注于本地文件的进程。 Docker Compose 也更多地为长时间运行的进程而设计,而不是为完成某些工作单元然后退出的批处理作业而设计。我可以在没有 Docker 的情况下在 Python 虚拟环境中运行它,由 shell 脚本或 Python 原生驱动程序驱动。
-
您是否建议在每个文件夹之外添加
xx.sh,然后将CMD更改为["python3", "./xx.sh"]? @大卫迷宫 -
我建议 using a Python virtual environment 并且根本不使用 Docker,因为你已经描述了这个问题。
-
我只制作一个 Python 容器...然后使用 Flask,例如通过 REST API 操作动态运行各个解析器函数
-
@OneCricketeer 感谢您的宝贵时间和宝贵意见。是的,我们目前正在运行 1 个容器,当时我在考虑这个问题。
标签: python python-3.x docker docker-compose dockerfile