Ich bin neu in Docker, und versuche ein einfaches Beispiel für einen Ubuntu-Container, der ein Shell-Skript ausführt. Ich bin unter Windows 10 mit Docker 17.09.0-CE.Ubuntu-Container kann Shell-Skript nicht finden
Mein Shell-Skript ist einfach:
#!/bin/sh
echo "hello world!"
Mein Dockerfile ist:
FROM ubuntu:14.04
WORKDIR /usr/local/bin
COPY shelltest.sh shelltest.sh
ENTRYPOINT ["/usr/local/bin/shelltest.sh"]
ich verschiedene Formen von ENTRYPOINT und CMD Anrufungen, und keine Arbeit versucht haben. Sie alle scheitern mit "keine solche Datei oder Verzeichnis". Wenn ich den Einstiegspunkt auf "/ bin/sh" ändere und den Container interaktiv starte, kann ich die Datei /usr/local/bin/shelltest.sh sehen, und es hat die Ausführungsrechte 755, also bin ich ratlos erkläre, warum das nicht funktioniert. Hier ist, was die Datei wie im Container aussieht, wenn der Einstiegspunkt wird auf „ls -l /usr/local/bin/shelltest.sh“:
ENTRYPOINT ["ls", "-l", "/usr/local/bin/shelltest.sh"]
d:\Dev\Docker\shelltest>docker run shelltest
-rwxr-xr-x 1 root root 32 Oct 29 16:32 /usr/local/bin/shelltest.sh
Was bin ich?
Hier sind einige Dinge, die ich versucht habe:
ENTRYPOINT ["/usr/local/bin/shelltest.sh"]
d:\Dev\Docker\shelltest>docker run shelltest
standard_init_linux.go:185: exec user process caused "no such file or directory"
ENTRYPOINT ["shelltest.sh"]
d:\Dev\Docker\shelltest>docker run shelltest
standard_init_linux.go:185: exec user process caused "no such file or directory"
CMD ["/usr/local/bin/shelltest.sh"]
d:\Dev\Docker\shelltest>docker run shelltest
standard_init_linux.go:185: exec user process caused "no such file or directory"
Die Datei hat bereits "x" Berechtigung (755), habe ich die Dateiattribute Ausgabe zu meiner Frage hinzugefügt. – Alan
Manchmal, wenn Sie Ihre Shell-Skripte in Windows schreiben, erhalten Sie seltsame Fehler, versuchen Sie 'dos2unix shelltest.sh' oder speichern Sie es als eine Unix-Datei, kein DOS. Wenn Sie keinen Zugang zu diesen Tools haben, versuchen Sie [diesen Link] (http://newline.nadav.org) –
Bitte aktualisieren Sie Ihre Antwort mit dieser Information, denn das war das Problem! Ich habe Notepad ++ verwendet, um das Shell-Skript mit Unix-Zeilenenden zu speichern, und jetzt wird der Container erfolgreich mit dem ENTRYPOINT-Set für diesen Script-Pfad ausgeführt. Vielen Dank! – Alan