![](/img/trans.png)
[英]what is a bare-bones Dockerfile/docker-compose.yml to run python scripts (with specific versions of python/packages)
[英]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.