Docker python тика - PullRequest
       95

Docker python тика

1 голос
/ 08 мая 2020

Мне нравится создавать Dockerfile, который устанавливает все необходимые компоненты для запуска python -tika внутри контейнера Docker.

Пока это мой Dockerfile:

###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:

docker build -t docker-tika .

docker run docker-tika

Но он жалуется на следующую ошибку:

[~/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 выглядит следующим образом:

import tika
tika.initVM()

У меня есть два следующих вопроса: 1. Я прочитал, что нам нужно загрузить jar-файл tika-server 2. Вызов initVM () внутри python скрипт, запускающий тика-сервер в фоновом режиме.

Я не знаю, чего не хватает в. Dockerfile. Благодарю за помощь!

У меня есть файл обновления Docker с Java, но он все еще жалуется на Java

### 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:

#!/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 запустить docker -tika

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.

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

У меня нет репутации, чтобы комментировать, поэтому пишите здесь.

Кажется, ваш Dockerfile делает сейчас многоступенчатую сборку , Java не в последнем фаза больше - предыдущая фаза удаляется.

Как ранее заявляли Гига Кокая и другие, проблема была в Java. Похоже, вы хотите сделать это с помощью одного Dockerfile. Этого можно достичь, например, сохранив этот Alpine в качестве базового образа, но вам потребуются некоторые дополнительные зависимости, чтобы иметь возможность устанавливать Python и необходимые пакеты pip. Alpine может быть не лучшей базой для Python при использовании со многими библиотеками, поскольку не использует библиотеку lib c. Однако вот очень примерно обновленный Dockerfile:

### 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"  ]
0 голосов
/ 08 мая 2020

Из tika-s github:

Чтобы использовать эту библиотеку, в вашей системе должна быть установлена ​​Java 7+, поскольку tika- python запускает сервер Tika REST в фоновом режиме.

Значит, вам нужно иметь java, но java в python:3 изображении нет. Есть несколько решений

  1. Найти python и тика установлена ​​docker изображение
  2. Использовать отдельные образы
  3. Установить вручную java на python: 3 добавьте команды установки java в ваш Dockerfile
  4. Установить python на java образ
...