2017-02-07 1 views
0

Ich muss dockered Python-Anwendung erstellen, die Datei von der Befehlszeile lesen wird.Datei als Befehlszeilenargument der Docker Python App

Ich weiß nicht, ob es möglich ist, aber meine Spezifikation für diese Anwendung läuft:

docker run -t myimage file.csv 

Im Moment sieht meine Docker-Datei wie folgt:

FROM python:3 
ADD test.py/
ENTRYPOINT ["python", "test.py"] 
CMD ["test.py"] 

Wo test.py ist: import sys

def main(args): 
    for a in args: 
     print(a) 
     with open(a, 'r') as f: 
      for l in f: 
       print(l) 


if __name__ == '__main__': 
    main(sys.argv) 

Antwort

1

Der docker Behälter die Datei nicht, wenn Sie sehen Ordnen Sie es als Volumen in den Container ein. Das Syntax würde wie folgt aussehen:

docker run -t -v `pwd`/file.csv:/file.csv myimage file.csv 

Das ./file.csv in den Behälter als /file.csv abbildet, und dann das Skript in den Behälter läuft:

python test.py file.csv 

Sie auch verwenden können Der Andocker cli, um Eingabe in den Container zu leiten, stdin. Von der CLI, müssen Sie -i einschließen es interaktiv zu machen, und dann die normale Shell-Umleitung verwenden wie:

docker run -it myimage <file.csv 

Wenn Sie dies tun, müssen Sie Ihren Python-Skript aktualisieren, von stdin statt lesen die Datei, und Sie hätten keine Möglichkeit, mit dem Python-Skript interaktiv zu sein, wenn Sie stdin für andere Dinge verwenden würden.

+0

Also meine Spezifikation ist falsch und kann in keiner Weise getroffen werden? –

+1

Es kann auf zwei Arten erfüllt werden, oben aufgeführt. Aber wie geschrieben, wird es nicht funktionieren, weil Sie file.csv nicht innerhalb des Containers platziert haben. – BMitch

Verwandte Themen