2017-04-14 23 views
2

Meine Dockerfile führt ein Python-Skript, das Lesen in einer Textdatei von meinem lokalen Rechner erfordert.Docker liest Datei vom lokalen System, wenn der Container läuft

Dockerfile

FROM fedeg/python-vim:2 
ADD . /code 
WORKDIR /code 
RUN pip install -r requirements.txt 
COPY file.txt /data/file.txt 
CMD ["python", "run.py"] 

Im run.py gibt es eine Funktion, die in der Textdatei lautet:

def read_file(filename): 
    lines = [line.rstrip('\n') for line in open(filename)] 
    return lines 

ich mich gefragt, ob ich dieses Bild zu jemandem weitergeben war anders und sie run it, wird die file.txt bereits im Image gespeichert oder kann docker beim Start des Images nach der Datei file.txt auf dem lokalen Rechner dieser Person suchen?

Was ich will, ist für Docker nach dem Namen file.txt auf allen Maschinen zu suchen, auf denen das Image läuft, so dass es auf den Inhalt der anderen file.txt statt der file.txt ich von meinem lokalen Rechner bereitgestellt arbeiten kann .

Antwort

1

Ja, es ist im Bild gespeichert.

Ein Bild enthält alle Änderungen, die Sie in der Dockerdatei beschreiben. Alles, was dort passiert, ist Teil des Bildes und kann von jemandem verwendet werden, dem du das Bild gibst.

Alles, was auf Ihrem Container passiert, den Sie mit dem Andock- oder Docker-Dienst erstellen, wirkt sich nicht auf Ihr Image aus. Wenn Sie möchten, dass Sie docker Commit einen Container, um es in ein neues Bild zu verwandeln.

+0

also, wenn jemand anderes das Bild hat, und sie haben eine andere file.txt, die sie ausführen möchten, wie ersetzen sie diese Datei.txt bereits in meinem Bild mit ihren? – jxn

+0

Wenn die Idee ist, dass jemand ihre Datei hinzufügen kann, sollten Sie ein eingehängtes Volume verwenden und nicht die Daten im Bild haben.Sie können weiterhin ein Volume auf dem Container-Volume bereitstellen, und die von Ihnen bereitgestellten Daten werden verwendet. – herm

+0

Ich erinnere mich nur, dass Sie auch [docker cp] (https://docs.docker.com/engine/reference/commandline/cp/) verwenden können, um Dateien zwischen Container und Host zu kopieren. – herm

1

Da @herm darauf hinweist, dass Sie den Container wie gewohnt erstellt haben, wird die Datei.txt im Container gespeichert.

Um das zu erreichen, was Sie wollen, die Kopie aus dem Dockerfile entfernen und stattdessen montieren Sie den Ordner datei.txt auf dem Hostcomputer mit der Option -v zur Laufzeit enthält:

docker run -v /folder/with/file:/data image_name 

wo/Ordner/mit/file ist der Pfad zu dem Ordner, der file.txt enthält, und image_name ist der Name Ihres Andock-Containers.

Der Inhalt von/data im laufenden Container ist jetzt der Inhalt des Ordners/folder/with/file.

EDIT:

Sie stattdessen auch einfach die Datei angehangen werden kann:

docker run -v /folder/with/file/file.txt:/data/file.txt image_name 

weist jedoch darauf hin, dass diese Probleme geben könnte, wenn Sie die Datei bearbeiten müssen. Siehe Docker Docs „Berg einer Host-Datei als Datenvolumen“

Hinweis: Viele Werkzeuge verwendet, um Dateien zu bearbeiten vi einschließlich und sed --in-Ort kann zu einer Inode Veränderung. Seit Docker v1.1.0 erzeugt dies einen Fehler wie "sed: kann ./sedKdJ9Dy nicht umbenennen: Gerät oder Ressource beschäftigt". Wenn Sie die gemountete Datei bearbeiten möchten, ist es oft am einfachsten, das übergeordnete Verzeichnis anzuhängen.

+0

Wenn mein aktueller Ordner '~/Desktop/docker_test/work' ist und die Textdatei in' ~/Desktop/docker_test' ist, lautet die Syntax wie folgt: 'docker run -v ~/Desktop/docker_test/work:/data image_name' – jxn

+0

Nicht ganz ... Sie möchten den Ordner mit der Datei.txt so mounten: 'docker run -v ~/Desktop/docker_test:/data image_name' – saxitoxin

+0

was ist mit dem Dateinamen? 'docker run -v ~/Desktop/docker_test/datei.txt:/data image_name' Ich habe den Ordner gemountet, aber dann ist der Python-Fehler, dass die Datei nicht gefunden werden kann – jxn

Verwandte Themen