簡體   English   中英

在 docker-compose.yml 中運行 Python package 和 multiple.py 腳本

[英]Run Python package with multiple .py scripts in docker-compose.yml

總結問題:

Python package 基本上在批處理文件夾中打開 PDF,讀取每個 PDF 的第一頁,匹配關鍵字,並將兼容的 PDF 轉儲到源文件夾中以供 OCR 腳本啟動。第一個獲取所有 PDF 的腳本是MainBankClass.py 我正在嘗試使用 docker-compose 文件將所有這些 python 腳本包含在同一網絡下,以便每個 OCR 腳本在預處理完成后開始掃描銀行對帳單。 這個鏈接是迄今為止最接近實現目標的鏈接,但似乎我錯過了其中的某些部分。 調用不同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后,容器和.network構建成功。 當我運行docker run -v /Users:/Users: python3 python3 ~/BankStatementsDemoOCR/BankStatements/MainBankClass.py時出現錯誤,錯誤消息是FileNotFoundError: [Errno 2] No such file or directory: 'BancAmericaOCR.py'

我假設容器沒有 BancAmericaOCR.py,但我已經在 same.network 下編寫了 each.py 文件,我認為links不是一個好習慣,因為 docker 建議在此處使用networks 我在這里錯過了什么? 任何幫助深表感謝。 提前致謝。

單個容器中的單個應用程序...需要不同py文件進行通信的網絡

你只有一個容器。 Docker.networks 用於多個容器相互通信。 並且 Docker Compose 為所有服務定義了默認的 bridge.network,因此如果您仍在使用 docker-compose,則不需要它

這是一個清理過的 Dockerfile,其中復制了所有腳本,並添加了一個入口點文件

FROM python:3.7-stretch
WORKDIR /app
COPY ./requirements.txt ./  
RUN pip3 install --upgrade pip PyMuPDF && pip3 install -r requirements.txt

COPY . /app

COPY ./docker-entrypoint.sh /
ENTRYPOINT /docker-entrypoint.sh

在您的入口點,您可以遍歷每個文件

#!/bin/bash

for b in Chase WellsFargo BofA ; do 
    python3 /app/$b.py
done

exec python3 /app/MainBankClass.py

因此,在對我的案例進行了幾天的搜索之后,我將關閉此線程,並在來自 docker 論壇的此鏈接上建議在單個容器中實施單個應用程序 建議的方法不是使用 docker-compose,而是為此應用程序使用 1 個容器和 dockerfile,它按預期工作。

在dockerfile之上,我們還需要不同py文件進行通信的網絡 例如:

docker network create my_net
docker run -it --network my_net -v /Users:/Users --rm my_awesome_app

編輯:不需要。網絡是必需的,因為我們只運行一個容器。

編輯 2:請參閱已接受的答案以供將來參考

如果有人對此案有更好的想法,歡迎任何答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM