Docker exec - Write-text-Datei im container
Ich schreiben möchte eine Textzeile in einer Textdatei INNERHALB einer Laufenden docker-container. Hier ist, was ich bisher ausprobiert habe:
docker exec -d app_$i eval echo "server.url=$server_url" >> /home/app/.app/app.config
Antwort:
/home/user/.app/app.config: No such file or directory
Zweiten Versuch:
cfg_add="echo 'server.url=$server_url' >> /home/user/.app/app.config"
docker exec -i app_$i eval $cfg_add
Antwort:
exec: "eval": executable file not found in $PATH
Irgendwelche Ideen?
Warum
Das Problem ist nicht, dass
-d
für docker exec?eval
ist nicht im container vorhanden. Der kernel ist geteilt zwischen dem host und container. Die Programme sind es nicht. Wenn Sie installiert nc
auf Ihrem host, die container werden nicht in der Lage, um ihn auszuführen, solange es nicht installiert es innerhalb.Das Problem ist nicht, dass
eval
ist nicht Gegenwart in den container (in der es wahrscheinlich ist, als ein shell-builtin der container-shell), sondern dass es nicht einen externen Dienstprogramm, so docker exec
können nicht aufgerufen werden können.InformationsquelleAutor jwi | 2016-02-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
eval
ist ein shell - builtin, in der Erwägung, dassdocker exec
erfordert eine externen Dienstprogramm genannt zu werden, so miteval
ist nicht eine option.Statt, rufen Sie eine shell ausführbare Datei in dem container (
bash
) explizit, und übergeben Sie den Befehl ausführen als string, über seine-c
option:Durch die Verwendung eines doppelten Anführungszeichen string übergeben
bash -c
stellen Sie sicher, dass die aktuellen shell ausführt, string interpolation, die erste, in der Erwägung, dass die containerbash
Instanz sieht dann das erweiterte Ergebnis als wörtliche, als Teil der embedded - single-quoted string.Als für Ihre Symptome:
/home/user/.app/app.config: No such file or directory
berichtet wurde, weil die Umleitung, Sie soll passieren in den container passiert eigentlich in Ihrem host-shell - und da dir./home/user/.app
offenbar nicht vorhanden sind in Ihrem host-Dateisystem, ist der Befehl fehlgeschlagen grundsätzlich, vor Ihrem host-shell versuchte sogar, den Befehl auszuführen (bash
wird der abort-Befehl Ausführung, wenn eine Ausgabe-Umleitung nicht durchgeführt werden kann).eval
seine Verwendung nicht Oberfläche, als ein problem, bis Sie Ihren zweiten Befehl, der eigentlich hat ausgeführt werden.exec: "eval": executable file not found in $PATH
passiert, weil, wie gesagt,eval
ist nicht ein externen Dienstprogramm, aber ein shell-builtin, unddocker exec
kann nur ausführen, externe Dienstprogramme.obj['key'] = 'value'
eine Datei mit dem Namen/etc/config.py
docker exec "app_$i" bash -c 'echo "obj['"'key'"'] = '"'value '"'"> /etc/config.py'
ist einfacher.
InformationsquelleAutor mklement0
Zusätzlich:
Wenn Sie schreiben müssen, das text von außerhalb der container, das funktioniert auch:
Dieses Rohr wird Sie Eingang in den Behälter. Dies würde natürlich auch für plain text (keine Datei). Es ist wichtig, lassen Sie die
-t
parameter.Sehen https://github.com/docker/docker/pull/9537
UPDATE (im Fall brauchen Sie nur die Dateien kopiert, nicht Teile von Dateien):
Andockfenster v17.03 hat
docker cp
die Kopien zwischen dem lokalen fs und der container: https://docs.docker.com/engine/reference/commandline/cp/#usageInformationsquelleAutor Risadinha