eval
ist eine Shell eingebaut , während docker exec
erfordert, dass ein externes Dienstprogramm aufgerufen wird. Daher ist eval
nicht eine Option.
Rufen Sie stattdessen eine Shell-ausführbare Datei im Container ( bash
) explizit auf und übergeben Sie ihr über die Option -c
den Befehl, der als Zeichenfolge ausgeführt werden soll :
Wenn Sie eine doppelt zitierte Zeichenfolge verwenden, um an bash -c
zu übergeben, stellen Sie sicher, dass die aktuelle -Shell zuerst die String-Interpolation durchführt, während die bash
-Instanz des Containers sieht das erweiterte Ergebnis als Literal als Teil der eingebetteten einfach zitierten Zeichenfolge.
Wie für Ihre Symptome :
/home/user/.app/app.config: No such file or directory
wurde gemeldet, weil die beabsichtigte Umleitung im Container tatsächlich in der Shell Ihres Hosts erfolgte - und weil dir. /home/user/.app
ist anscheinend nicht im Dateisystem Ihres Hosts vorhanden, der Befehl ist fehlgeschlagen grundsätzlich , bevor die Shell Ihres Hosts versucht hat, den Befehl auszuführen ( bash
bricht die Ausführung des Befehls ab) Wenn eine Ausgabeumleitung nicht durchgeführt werden kann.)
eval
enthielt, tauchte seine Verwendung nicht als Problem auf, bis Ihr zweiter Befehl, der wirklich ausgeführt wurde exec: "eval": executable file not found in $PATH
ist passiert, weil, wie bereits erwähnt, eval
kein externes Dienstprogramm ist, sondern nur eine Shell und docker exec
externe Dienstprogramme ausführen.
Zusätzlich:
Wenn Sie Text außerhalb des Containers schreiben müssen, funktioniert das auch:
%Vor% Dadurch werden Sie in den Container geleitet. Das funktioniert natürlich auch für reinen Text (keine Datei). Es ist wichtig, den Parameter -t
zu lassen.
Siehe Ссылка
UPDATE (falls Sie nur Dateien, nicht Teile von Dateien kopieren müssen):
Docker v17.03 hat docker cp
, das zwischen den lokalen fs und dem Container kopiert: Ссылка