Ich bin neu in Docker und Container - Ich habe ein Python 3-Skript, das Daten von einer Website basierend auf Befehlszeilenparameter und druckt die Ergebnisse. Es verwendet Redis zum Zwischenspeichern von Daten, wenn keine Netzwerkverbindung verfügbar ist. Die Dockerfile Ich habe wie folgt aussiehtRunning Docker Skript-Anwendung in einem Container
FROM ubuntu:latest
RUN apt-get update -y && apt-get -y install redis-server && apt-get install -y python3-pip python3.5-dev build-essential
COPY . /app
WORKDIR /app
RUN pip3 install -r requirements.txt
ENTRYPOINT ["python3"]
CMD ["pn.py"]
ich in der Lage bin, das Bild zu bauen, aber wenn ich die Container starten läuft es vermutlich den Python-Befehl, um das Skript im Innern des Behälters und Ausfahrten zu laufen, und als consquence I kann die Ergebnisse vom Host nicht sehen.
Das Skript erfordert Befehlszeileneingaben, andernfalls schlägt es fehl. Wie können diese als Teil eines einzelnen Docker-Ausführungsbefehls angegeben werden, den ich verwenden kann, um das Skript vom Host aus auszuführen?
Alternativ wie kann ich den Container ohne Aufruf des Skripts starten und stattdessen das Skript manuell im laufenden Container ausführen?
OK danke. Der Befehl "apt-get -y install redis-server" in der zweiten Zeile der 'Dockerfile' soll' redis-server' installieren und automatisch starten, aber das funktioniert nicht. Nach dem Betreten des Containers sagt 'service redis-server status' mir, dass es nicht läuft. Dies geschieht sogar nachdem ich die 'Dockerfile' geändert habe, um die zusätzliche Zeile' service redis-server restart' unmittelbar nach der 'apt-get update'- und install-Zeile hinzuzufügen. Wie kann ich das beheben? – srm
Sie haben das Konzept der 'Dockerfile' falsch verstanden. Sie erhalten keinen Dienst, der von einer Zeile zur nächsten läuft. Die 'Dockerfile' erstellt' Docker Images', die aus einem oder mehreren 'Layers' bestehen. Jede Zeile Ihrer 'Dockerfile' erstellt eine neue Ebene. Stellen Sie sich das als statische Mitglieder einer Klasse vor, und das resultierende Bild ist eine Klasse. Der Container, nach dem Sie mit diesem Image arbeiten, ist eine Instanz dieser Klasse oder ein Objekt. Sie können nicht erwarten, dass Dienste beim Erstellen des Abbilds mit der Docker-Datei ausgeführt werden. –
Auch würde ich die Zeile ändern 'RUN apt-get update-y && apt-get -y install redis-server && apt-get install -y python3-pip python3.5-dev build-essential' auf 'RUN apt- get update && apt-get install -y redis-server python3-pip python3.5-dev build-essential' zur Vereinfachung. –