无法在 Heroku 上找到由 Poppler-Utils 创建的文件



我在 Heroku 上运行一个应用程序,该应用程序在上传到外部存储之前需要处理。我的工作目录是/usr/src/app/并且程序无法再找到文件。这是我的 Dockerfile 的样子:

FROM ubuntu
RUN apt-get update && apt-get -y install poppler-utils && apt-get clean
FROM python:alpine3.7
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY upload.py /usr/src/app/
COPY index.html /usr/src/app/
COPY success.html /usr/src/app/
COPY requirements.txt /usr/src/app/
CMD gunicorn --bind 0.0.0.0:$PORT wsgi
RUN pip install -r requirements.txt
CMD python ./upload.py

这就是我所说的波普勒

commandCall = 'pdftohtml -c -s "' + newPath + '" "' + htmlPath + '"'
subprocess.call(commandCall, shell=True)

它应该保存在工作目录中,但是当我去使用它创建的文件时,它找不到它。我正在使用 Tornado 作为我的 HTTP 处理程序,我想知道问题是否出在容器中使用子进程调用。

当前Dockerfile按原样不可构建。

首先,启动gunicorn的命令需要一个wsgi模块,该模块在作为参数传递给可执行文件之前永远不会被复制gunicorn

此外,Dockerfile 中还列出了多个命令。Docker 只将最后一个命令作为要运行的入口点命令。

可以按如下方式清理您的 docker文件:

Dockerfile

FROM ubuntu
RUN apt-get update && apt-get -y install poppler-utils && apt-get clean
FROM python:alpine3.7
WORKDIR /usr/src/app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
RUN adduser -D myuser
USER myuser
CMD gunicorn --user myuser --bind 0.0.0.0:$PORT wsgi:app

上面的文件假设文件夹中有一个wsgi.py模块,docker build命令将在其中执行,并且该文件中声明了一个app名称,该名称绑定到实现WSGI应用程序接口的对象。

测试您是否可以通过运行docker build -t poppler .在本地构建它。

另请注意,即使对于 docker 映像,文件系统也是短暂的。 因此,该文件仅在测功机的生命周期内保留。

如果必须需要在入口点命令中运行多个进程,请考虑为此使用 supervisord。

相关内容

  • 没有找到相关文章

最新更新