2016-10-24 4 views
0

Ich habe einen Container, der ohne Probleme ausgeführt wird. Ich habe ein Bash-Skript hinzugefügt, um ein paar andere Skripte zu ergänzen, die sich bereits im Container befinden. Das Docker-Image kopiert 2 Skripte nach/usr/local/bin und sie können mit docker exec -c containername existingscript erreicht werden.Skript kann nicht zum vorhandenen Docker-Container hinzugefügt werden

Ich habe mein eigenes Skript in das gleiche Verzeichnis, und wenn Sie den gleichen Befehl ich einen Fehler ausgeführt wird, dass exec nicht das Skript ausführen können: nicht in $ PATH befindet sich keine Datei oder das Verzeichnis, Skript. Ich überprüfe den Pfad und natürlich ist/usr/local/bin aufgelistet. Ich überprüft Berechtigungen und das Skript ist 755.

Ich öffne dann eine interaktive Shell mit Docker exec -it Mycontainer Bash und run/usr/local/bin/meinscript und es läuft ohne Probleme.

Warum kann ich das Skript nicht von außerhalb des Containers ausführen, wie ich die anderen zwei (die im Bild enthalten waren). Alle drei haben fast die gleichen Funktionen am Tag verwenden keine speziellen Programme, man listet Dateien auf, man fügt Dateien hinzu, man liest die Datei.

Die Basis ist Ubuntu.

EDIT: Gefunden, wo ich in der Frage läuft. Hat die Antwort gegeben, falls jemand anders den gleichen Fehler macht.

EDIT-2: So das Skript, das mit dem Docker Bild kam ein paar gemeinsamen Funktionen auszuführen ruft die Bild nicht die Behälter so meine Zugabe des Skripts im Behälter hatten keine Auswirkungen auf dem Skript, das war, warum Ich habe immer den Fehler no file oder directory erhalten.

Die Zeile im Skript in Frage: docker run --rm -v "$(pwd)/config":/path/to/file -ti image_name:latest" mynewscript [email protected]

Natürlich, die gegen das Bild lief und nicht den Behälter.

Einmal habe ich bemerkt, dass ich versuchte es mit exec statt laufen laufen und es lief ohne Fehler, etwa so:

docker exec -it container_name mynewscript

+0

Bitte, können Sie Ihre Docker Datei zeigen? – yashpandey

Antwort

1

Während ich Snippets hinzugefügt habe, um das Problem zu erklären, habe ich das Problem und die Lösung gefunden.

Also ich greife auf die Skripte innerhalb des Containers vom Host mit einem anderen Skript, das Sie verschiedene Dinge basierend auf Switch-Fall zu tun. Die Skripts werden für das Andock-Image und nicht für den Container aufgerufen, sodass das Skript, das ich hinzugefügt habe, nicht wirklich im Image vorhanden ist.

Ich änderte das Skript, um den Container anstelle des Bildes aufzurufen, und es funktioniert wie erwartet.

EDIT: Ich habe die Frage mit der Antwort aktualisiert, aber ich bin das Hinzufügen es auch hier:

Also das Skript, das mit dem Docker Bild kam ein paar gemeinsame Funktionen ausführen ruft das Bild nicht der Behälter so mein Hinzufügen Die Skripte für den Container hatten keine Auswirkungen auf das Skript, weshalb ich immer den Fehler no file or directory erhielt.

Die Zeile im Skript in Frage:

docker run --rm -v "$(pwd)/config":/path/to/file -ti image_name:latest" mynewscript [email protected]

Natürlich, die gegen das Bild lief und nicht den Behälter.

Einmal bemerkte ich, dass ich es mit exec statt laufen versucht laufen und es lief ohne Fehler, etwa so:

docker exec -it container_name mynewscript

+0

würde sich freuen, wenn Sie den Code ändern. – LittleQ

+0

Sicher, ich werde meine Antwort mit der Änderung morgen bearbeiten, wenn ich an meinem PC bin .. – jcalton88

+1

Bearbeitete die Frage, um die Antwort aufzunehmen. – jcalton88

1

Der Grund dafür ist „/ usr/local/bin“ nicht in Ihrem Skript $ PATH, Sie können/usr/local/bin/myscript explizit in Ihrem Skript verwenden. Oder exportiere $ PATH zuerst im Skript.

+0

Dies ist, was für mich verwirrend ist, die anderen zwei Skripte (die mit dem Bild kommen) perfekt ausführen. Mein Skript befindet sich am selben Ort/usr/local/bin und wird genau so aufgerufen. Scheint so, als müsste es funktionieren. Ich bearbeite die Frage so, wie sie heißt. – jcalton88

+0

Ich habe dem Beispiel die Snippets hinzugefügt und herausgefunden, wo das Problem lag. Das Skript auf dem Host, das die anderen Skripts innerhalb des Containers aufruft und ausführt, wird für das Image und nicht für den Container ausgeführt. Daher ist das Skript, das ich dem Container hinzufüge, nicht vorhanden. – jcalton88

+0

@ jcalton88 Ich denke, der Unterschied kommt vom Besitzer des Skripts (anderer Benutzer anders. Bashrc). Sie können in Skripten $ PATH angeben, um die Ursache zu finden. – LittleQ

Verwandte Themen