2017-07-19 17 views
0

Ich verfolge die Docker-getting started Führung Docker mit einer Python-Anwendung zu verwenden, aber wenn Docker auf den Befehl aufstehen:mit Docker verschiedenen Python als System

docker run -p 80:80 username/repo:tag 

ich die folgende Fehlermeldung erhalten:

Traceback (most recent call last): 
    File "app.py", line 1, in <module> 
    from flask import Flask 
ImportError: No module named flask 

habe ich installiert Flask für, wenn ich laufen which flask und which python

/usr/local/bin/flask 
/usr/local/bin/python 

werden zurückgegeben. Wenn ich jedoch sudo pip install Flask führe, bekomme ich

Requirement already satisfied: flask in ./python2.7/site-packages 
Requirement already satisfied: click>=2.0 in ./python2.7/site- 
packages (from flask) 
Requirement already satisfied: Werkzeug>=0.7 in ./python2.7/site- 
packages (from flask) 
Requirement already satisfied: Jinja2>=2.4 in ./python2.7/site- 
packages (from flask) 
Requirement already satisfied: itsdangerous>=0.21 in 
./python2.7/site-packages (from flask) 
Requirement already satisfied: MarkupSafe>=0.23 in ./python2.7/site- 
packages (from Jinja2>=2.4->flask) 

was eindeutig ein anderes Verzeichnis ist. Mein erster Gedanke wäre, dass ich Python aus zwei verschiedenen Verzeichnissen verwende und deshalb kann ich den Docker-Befehl nicht ausführen. Aber ich bin auch ein Anfänger und weiß nicht wirklich, wie ich mit der Fehlersuche beginnen und das Problem beheben kann. Ich würde es sehr schätzen, wenn mir jemand hier ein paar Hinweise geben würde. Danke im Voraus.

EDIT Hier ist meine Dockerfile

# Use an official Python runtime as a parent image 
FROM python:2.7-slim 

# Set the working directory to /app 
WORKDIR /app 

# Copy the current directory contents into the container at /app 
ADD . /app 

# Install any needed packages specified in requirements.txt 
RUN pip install -r requirements.txt --proxy 
https://proxy:8080 --trusted-host pypi.python.org 

# Make port 80 available to the world outside this container 
EXPOSE 80 

# Define environment variable 
ENV NAME World 

# Run app.py when the container launches 
+0

Aber haben Sie python/flask/etc in Ihrem Docker Container installiert? –

+0

@ A.Haaji, ja ich tat, weil ich die App aus dem Container heraus ausführen konnte. –

+0

könnten Sie bitte Ihre Dockerfile zur Verfügung stellen? –

Antwort

0

Die pip install Anweisung gewickelt werden sollte, und Sie vielleicht möchten Ihre ADD vor WORKDIR setzen, auch scheinen Sie keine korrekte ENTRYPOINT

zu haben
# Use an official Python runtime as a parent image 
FROM python:2.7-slim 

# Copy the current directory contents into the container at /app 
ADD . /app 

# Set the working directory to /app 
WORKDIR /app 

# Install any needed packages specified in requirements.txt 
RUN pip install -r requirements.txt --proxy \ 
https://proxy:8080 --trusted-host pypi.python.org 

# Make port 80 available to the world outside this container 
EXPOSE 80 

# Define environment variable 
ENV NAME World 

# Run app.py when the container launches 
## Where is the ENTRYPOINT ? 
1

Keine direkte Antwort auf die Frage, aber das kann Ihnen viel Zeit sparen.

Jeder Docker-Befehl fügt dem Bild eine neue Ebene hinzu. Beim Erstellen des Bildes wird Docker versuchen herauszufinden, welche Ebene neu erstellt werden muss. Sie würden die Dateien in Ihrer App wahrscheinlich bei jedem Build ändern. Dies ist die erste Ebene, sodass Sie jedes Mal, wenn Sie ein Build erstellen, die Anforderungen installieren müssen. Dies kann eine Menge zusätzliches Warten hinzufügen.

Lassen Sie uns in die requirements.txt kopieren und installieren Sie zuerst die Anforderungen. Dann wird diese Ebene zwischengespeichert, bis wir die Anforderungen ändern.

# Use an official Python runtime as a parent image 
FROM python:2.7-slim 

# Install any needed packages specified in requirements.txt 
COPY requirements.txt requirements.txt 
RUN pip install -r requirements.txt --proxy https://proxy:8080 --trusted-host pypi.python.org 

ADD . /app  
WORKDIR /app 
EXPOSE 80 

Wenn ein dockerfile bauen, versuchen Sie die Schichten schafft es sichtbar zu machen und wie das wird hilfreich sein, Build-Zeit zu reduzieren.

Verwandte Themen