Ich versuche, ein Python-Skript in einem Docker-Container auszuführen, und ich weiß nicht warum, Python kann keine der Python-Modul finden. Ich dachte, es hat etwas mit der PYTHONPATH env Variable zu tun, also habe ich versucht, es in der Dockerfile wie folgt hinzuzufügen: ENV PYTHONPATH $PYTHONPATH
"ModuleNotFoundError: Kein Modul namens <package>" in meinem Docker-Container
Aber es hat nicht funktioniert. diese ist, was meine Dockerfile wie folgt aussieht:
FROM ubuntu:16.04
MAINTAINER SaveMe [email protected]
ADD . /app
WORKDIR /app
RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y locales
# Set the locale
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/'
/etc/locale.gen && \
locale-gen
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENV PYTHONPATH ./app
#Install dependencies
RUN echo "===> Installing sudo to emulate normal OS behavior..."
RUN apt-get install -y software-properties-common
RUN apt-add-repository universe
RUN add-apt-repository ppa:jonathonf/python-3.6
RUN (apt-get update && apt-get upgrade -y -q && apt-get dist-upgrade -
y -q && apt-get -y -q autoclean && apt-get -y -q autoremove)
RUN apt-get install -y libxml2-dev libxslt-dev
RUN apt-get install -y python3.6 python3.6-dev python3.6-venv openssl
ca-certificates python3-pip
RUN apt-get install -y python3-dev python-dev libffi-dev gfortran
RUN apt-get install -y swig
RUN apt-get install -y sshpass openssh-client rsync python-pip python-
dev libffi-dev libssl-dev libxml2-dev libxslt1-dev libjpeg8-dev
zlib1g-dev libpulse-dev
RUN pip install --upgrade pip
RUN pip install bugsnag
#Install python package + requirements.txt
RUN pip3 install -r requirements.txt
CMD ["python3.6", "import_emails.py"]
, wenn ich zu laufen bin versucht: sudo docker run <my_container>
ich dieses Traceback bekam:
Traceback (most recent call last):
File "import_emails.py", line 9, in <module>
import bugsnag
ModuleNotFoundError: No module named 'bugsnag'
Wie man sehen kann ich verwende python3.6 für diese Projekt. Irgendwelche Hinweise darauf, wie man das löst?
ich unten beantwortet, aber ich wollte Ihnen eine Empfehlung geben [minimieren Sie Ihre Schichten] (https: //docs.docker. com/engine/userguide/eng-image/dockerfile_best-practices/# Minimiere die Anzahl der Ebenen durch Kombinieren von RUN-Aufrufen. Abhängig von deiner Docker-Version mag das nicht viel ausmachen, aber wenn du erwartest, dass andere deine Bilder verwenden, glaube ich, dass es an diesem Punkt nicht nur funktionell, sondern auch richtig formatiert ist. – bluescores