Ich versuche, während des Erstellungsprozesses in meiner Docker-Datei ein Skript auszuführen. Aber es scheint nicht zu funktionieren.
Ich habe es so versucht:
FROM php:7-fpm
ADD bootstrap.sh /
ENTRYPOINT ["/bin/bash", "/bootstrap.sh"]
Auch so:
FROM php:7-fpm
ADD bootstrap.sh /
RUN bash -c "/bootstrap.sh"
Und ich führe auch meinen laufenden Container aus:
docker exec symfony /bin/bash -c "/bootstrap.sh"
Nichts scheint zu funktionieren.
Weißt du, wie man es macht?
RUN
und ENTRYPOINT
sind zwei verschiedene Methoden zum Ausführen eines Skripts.
RUN
bedeutet, dass ein Zwischencontainer erstellt wird, das Skript ausgeführt wird und der neue Status dieses Containers in einem neuen Zwischenimage eingefroren wird. Das Skript wird danach nicht mehr ausgeführt: Ihr endgültiges Image soll das Ergebnis dieses Skripts widerspiegeln.
ENTRYPOINT
bedeutet, dass Ihr Image (das das Skript noch nicht ausgeführt hat) einen Container erstellt und dieses Skript ausführt.
In beiden Fällen muss das Skript hinzugefügt werden und ein RUN chmod +x /bootstrap.sh
ist eine gute Idee.
Es sollte auch mit einem Shebang beginnen (wie #!/bin/sh
)
Betrachten Sie Ihr Skript ( KevinRaimbaud/docker-symfony/docker/php/bootstarp.sh
: ein paar git config --global
-Befehle), es ist am besten, das Skript einmal in Ihrer Docker-Datei auszuführen, aber darauf zu achten, dass der richtige Benutzer verwendet wird (die globale Konfigurationsdatei für Git ist% HOME% /. gitconfig, die standardmäßig die Datei/root ist).
Add to Ihre Dockerfile :
RUN /bootstart.sh
Überprüfen Sie dann beim Ausführen eines Containers den Inhalt von /root/.gitconfig
, um zu bestätigen, dass das Skript ausgeführt wurde.
Versuchen Sie, ein Skript mit dem Befehl ADD
und der Angabe des Arbeitsverzeichnisses zu erstellen. So ("script" ist der Name des Skripts und /root/script.sh
ist die Stelle, an der Sie es im Container haben möchten. Es kann sich um einen anderen Pfad handeln :
ADD script.sh /root/script.sh
In diesem Fall muss ADD
vor CMD
stehen. Wenn Sie übrigens eine haben, ist es eine gute Möglichkeit, Skripte von einem Host-Computer an einen beliebigen Ort im Container zu importieren
In CMD
Platz [./script]
Es sollte automatisch Ihr Skript ausführen
Sie können auch WORKDIR
als /root
angeben, dann werden Sie beim Starten eines Containers automatisch in root abgelegt
Zusätzlich zu den obigen Antworten:
Wenn Sie Ihre .sh-Skriptdatei in Windows erstellt/bearbeitet haben, vergewissern Sie sich, dass sie mit einem Zeilenende im Unix-Format gespeichert wurde . Standardmäßig konvertieren viele Editoren in Windows Unix-Zeilenenden in das Windows-Format, und Linux erkennt Shebang (#!/Bin/sh) am Anfang der Datei nicht. So wird Linux die Fehlermeldung erzeugen, als ob es kein Shebang gibt.
Tipps: