【发布时间】: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