首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头巨蟒

码头巨蟒
EN

Stack Overflow用户
提问于 2020-05-08 14:32:33
回答 3查看 2.1K关注 0票数 3

我喜欢创建一个Dockerfile,它安装在Docker容器中运行python所需的所有组件。

到目前为止,这是我的Dockerfile:

代码语言:javascript
复制
###Get python
FROM python:3

RUN pip3 install --upgrade pip requests
RUN pip3 install python-docx tika numpy pandas

RUN mkdir scripts

ADD runner.py /scripts/

CMD [ "python", "./scripts/runner.py" ]

我构建它并运行Dockerfile:

代码语言:javascript
复制
docker build -t docker-tika .

docker run docker-tika

但是它抱怨了以下错误:

代码语言:javascript
复制
[~/Documents/BERT_DV/Docker_Parser] $ docker run docker-tika
2020-05-08 13:49:52,528 [MainThread  ] [INFO ]  Retrieving http://search.maven.org/remotecontent?filepath=org/apache/tika/tika-server/1.24/tika-server-1.24.jar to /tmp/tika-server.jar.
2020-05-08 13:50:09,742 [MainThread  ] [INFO ]  Retrieving http://search.maven.org/remotecontent?filepath=org/apache/tika/tika-server/1.24/tika-server-1.24.jar.md5 to /tmp/tika-server.jar.md5.
2020-05-08 13:50:10,133 [MainThread  ] [ERROR]  Unable to run java; is it installed?
2020-05-08 13:50:10,134 [MainThread  ] [ERROR]  Failed to receive startup confirmation from startServer.
2020-05-08 13:50:10,271 [MainThread  ] [ERROR]  Unable to run java; is it installed?
2020-05-08 13:50:10,271 [MainThread  ] [ERROR]  Failed to receive startup confirmation from startServer.

runner.py脚本如下所示:

代码语言:javascript
复制
import tika
tika.initVM()

我有以下两个问题: 1.我看到我们需要下载tika-server jar 2.调用python脚本中的initVM(),在后台启动tika-server。

我不知道里面少了什么。码头文件。感谢你的帮助!

我也用Java更新了Docker文件,但是它仍然在抱怨Java

代码语言:javascript
复制
### 1. Get Linux
FROM alpine:3.7

### 2. Get Java via the package manager
RUN apk update \
&& apk upgrade \
&& apk add --no-cache bash \
&& apk add --no-cache --virtual=build-dependencies unzip \
&& apk add --no-cache curl \
&& apk add --no-cache openjdk8-jre

ENV JAVA_HOME=/opt/java/openjdk \
    PATH="/opt/java/openjdk/bin:$PATH"

###3. Get ython
FROM python:3

RUN pip3 install --upgrade pip requests
RUN pip3 install python-docx tika numpy pandas

RUN mkdir scripts
RUN mkdir pdfs
RUN mkdir output

ADD runner2.py /scripts/
ADD sample.pdf .

CMD [ "python", "./scripts/runner2.py" ]

cat runner2.py:

代码语言:javascript
复制
#!/usr/bin/env python
import tika
from tika import parser
parsed = parser.from_file('sample.pdf')
print(parsed["metadata"])
print(parsed["content"])

~/Documents/BERT_DV/ docker _Parser $docker run docker-tika

代码语言:javascript
复制
2020-05-08 14:40:23,183 [MainThread  ] [INFO ]  Retrieving http://search.maven.org/remotecontent?filepath=org/apache/tika/tika-server/1.24/tika-server-1.24.jar to /tmp/tika-server.jar.
2020-05-08 14:41:00,480 [MainThread  ] [INFO ]  Retrieving http://search.maven.org/remotecontent?filepath=org/apache/tika/tika-server/1.24/tika-server-1.24.jar.md5 to /tmp/tika-server.jar.md5.
2020-05-08 14:41:02,324 [MainThread  ] [ERROR]  Unable to run java; is it installed?
2020-05-08 14:41:02,324 [MainThread  ] [ERROR]  Failed to receive startup confirmation from startServer.
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-08 17:44:17

我没什么好评论的,所以在这里发帖。

看来,您的Dockerfile现在正在制作多级建造,Java不再处于最后一个阶段了--之前的阶段被删除了。

正如Giga之前和其他人所指出的,Java是问题所在。您似乎想用一个Dockerfile来完成它。例如,可以通过将该高山作为基本映像来实现它,但您需要一些额外的依赖项才能安装Python和所需的pip包。当与许多库一起使用时,阿尔卑斯可能不是Python的最佳基础,因为它没有使用libc库。但是,这里是非常粗略更新的Dockerfile:

代码语言:javascript
复制
### 1. Get Linux
FROM alpine:3.7

### 2. Get Java via the package manager
RUN apk update \
&& apk upgrade \
&& apk add --no-cache bash \
&& apk add --no-cache --virtual=build-dependencies unzip \
&& apk add --no-cache curl \
&& apk add --no-cache openjdk8-jre \
&& apk add python3 python3-dev gcc g++ gfortran musl-dev libxml2-dev libxslt-dev

ENV JAVA_HOME=/opt/java/openjdk \
    PATH="/opt/java/openjdk/bin:$PATH"


RUN pip3 install --upgrade pip requests
RUN pip3 install python-docx wheel tika numpy 
RUN pip3 install pandas

RUN mkdir scripts
RUN mkdir pdfs
RUN mkdir output

ADD runner2.py /scripts/
ADD sample.pdf .

CMD [ "python3", "./scripts/runner2.py"  ]
票数 4
EN

Stack Overflow用户

发布于 2020-05-08 14:47:36

来自蒂卡-s github:

要使用这个库,您需要在后台启动Tika服务器时,在您的系统上安装7+。

所以您需要有java,但是在python:3映像中没有java。有一些解决办法

  1. 查找python和tika已安装的坞映像
  2. 使用单独的图像
  3. 手动在python上安装java :3,将java安装命令添加到Dockerfile中
  4. 在java映像上安装python
票数 1
EN

Stack Overflow用户

发布于 2021-09-11 14:44:27

我正在转发@anapaulagomes的评论作为回答,因为这就是我在谷歌上搜索的原因--将Tika作为一个码头容器运行:

我设法通过使用Tika作为一个单独的服务来解决这个问题(这比在同一个映像中具有更好的性能)。但是,我没有运行Tika的jar,而是使用它的API。您只需要配置环境变量TIKA_CLIENT_ONLY: 1TIKA_SERVER_ENDPOINT: tika:9998。您可以在这里看到Dockerfile和docker-compose.yml:https://github.com/DadosAbertosDeFeira/maria-quiteria

您可以通过以下方式启动Tika服务

代码语言:javascript
复制
docker run --rm -t -d --name my_tika --net my-network \
         -p 9998:9998 apache/tika:1.27

或者将其添加到您的坞-Compose.yml中:

代码语言:javascript
复制
tika:
    image: apache/tika
    ports:
        - "9998:9998"

这允许您调用from tika import parser和解析,而无需调用tika.initVM()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61681495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档