【问题标题】:Python(pip) not install ElasticSearch library on kubernetesPython(pip)未在 kubernetes 上安装 ElasticSearch 库
【发布时间】:2020-01-10 14:43:25
【问题描述】:

我正在编写一个 python 应用程序来将一些结果推送到elasticsearch。

我已经写了一个 Dockerfile 来构建它并正在通过 Kubernetes 部署它。

当我执行 docker run 时,我的本地机器上似乎一切正常。

应用程序正在运行,它正在将数据推送到 ElasticSearch。

但是当我在 K8S 上运行它时,我遇到了以下错误:

Traceback (most recent call last):
  File "application.py", line 2, in <module>
    from elasticsearch import Elasticsearch
ModuleNotFoundError: No module named 'elasticsearch'

我正在安装 elasticsearch,使用 pip。

Dockerfile:

FROM python:3.7.3-alpine

RUN apk update && apk upgrade && apk add gcc libc-dev g++ libffi-dev libxml2 unixodbc-dev mariadb-dev postgresql-dev \
python-dev vim

RUN addgroup -S -g 1000 docker \
    && adduser -D -S -h /var/cache/docker -s /sbin/nologin -G docker -u 1000 docker \
    && chown docker:docker -R /usr/local/lib/python3.7/site-packages/

WORKDIR /app/
COPY application.py /app/
COPY lib.txt /app/
RUN chown docker:docker -R /app/

USER docker

# Install the dependencies
RUN ["pip", "install", "-r", "lib.txt", "--user"]

ENV PYTHONPATH=/usr/local/lib/python2.7/site-packages

RUN echo $PYTHONPATH

CMD [ "python",  "application.py"]

lib.txt

Flask==1.0.2
prometheus_client>=0.6.0
requests>=2.21.0
six>=1.12.0
# Elasticsearch 7.x
elasticsearch>=7.0.0,<8.0.0
pyodbc

正如一个answer 中所建议的,我也在Dockerfile 中设置PYTHONPATH。

任何建议,我错过了什么?

示例代码here。

谢谢

【问题讨论】:

  • 您是否尝试过登录容器(pod)并手动安装和执行elasticsearch?它可以帮助您进一步调试。
  • 你能分享一下你的代码的小sn-p吗?
  • @FL3SH,我已经编辑了我的问题并添加了 repo。
  • 它在两种情况下都有效(docker、kubernetes)我看到__init__ called。请添加您的 kubernetes yaml。

标签: python docker elasticsearch kubernetes pip


【解决方案1】:

试试这个 Dockerfile:

FROM python:3.7.3-alpine

RUN apk update && apk upgrade && apk add gcc libc-dev g++ libffi-dev libxml2 unixodbc-dev mariadb-dev postgresql-dev \
python-dev vim

# Install the dependencies
RUN pip install --upgrade pip
RUN mkdir /app
COPY lib.txt /app/lib.txt
RUN pip install -r lib.txt

RUN addgroup -S -g 1000 docker \
    && adduser -D -S -h /var/cache/docker -s /sbin/nologin -G docker -u 1000 docker

WORKDIR /app
COPY application.py /app/
RUN chown docker:docker -R /app/

USER docker

CMD [ "python",  "application.py"]

变化:

  • 在安装依赖项之前更新了 pip。这会在我的容器中删除一些警告,并在构建映像时将 pip 包保留为最新版本。
  • 当仍以 root 用户执行时,将 pip 包安装为系统的一部分。
  • 删除了 PYTHONPATH,它似乎指向了错误的位置。
  • 删除了不必要的所有者更改。

【讨论】:

  • pip 安装出现错误no such option: -u。我想一定是-U
猜你喜欢
  • 2021-01-28
  • 1970-01-01
  • 2017-01-02
  • 2015-01-05
  • 1970-01-01
  • 2018-01-22
  • 2019-05-27
  • 2019-07-01
  • 2022-11-15
相关资源
最近更新 更多