I'm versucht, ein Skript während meiner Gebäude-Prozess in meinem Dockerfile laufen. Aber es scheint nicht zu funktionieren.
Ich habe es auf diese Weise versucht:
FROM php:7-fpm
ADD bootstrap.sh /
ENTRYPOINT ["/bin/bash", "/bootstrap.sh"]
Auch auf diese Weise:
FROM php:7-fpm
ADD bootstrap.sh /
RUN bash -c "/bootstrap.sh"
Und auch beim Ausführen meines laufenden Containers:
docker exec symfony /bin/bash -c "/bootstrap.sh"
Nichts scheint zu funktionieren.
Wissen Sie, wie man es macht?
RUN" und "ENTRYPOINT" sind zwei verschiedene Möglichkeiten, ein Skript auszuführen.
RUN" bedeutet, dass es einen Zwischencontainer erstellt, das Skript ausführt und den neuen Zustand dieses Containers in einem neuen Zwischenabbild einfriert. Das Skript wird danach nicht mehr ausgeführt: Ihr endgültiges Image soll das Ergebnis des Skripts widerspiegeln.
ENTRYPOINT" bedeutet, dass Ihr Image (das das Skript noch nicht ausgeführt hat) einen Container erstellt und das 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
)
In Anbetracht Ihres Skripts (KevinRaimbaud/docker-symfony/docker/php/bootstarp.sh
: ein paar git config --global
-Befehle) wäre es am besten, dieses Skript einmal in Ihrer Dockerdatei auszuführen, aber darauf zu achten, dass Sie den richtigen Benutzer verwenden (die globale Git-Konfigurationsdatei ist %HOME%/.gitconfig, die standardmäßig die /root-Datei ist)
Fügen Sie Ihr Dockerfile hinzu:
RUN /bootstart.sh
Wenn Sie dann einen Container starten, überprüfen Sie 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.
Etwa so ("script" ist der Name des Skripts und /root/script.sh
ist der Ort, an dem Sie es im Container haben wollen, es kann ein anderer Pfad sein:
ADD script.sh /root/script.sh
In diesem Fall muss ADD
vor CMD
stehen, falls Sie eines haben
Nebenbei bemerkt ist es ein cooler Weg, Skripte von der Hostmaschine an einen beliebigen Ort im Container zu importieren.
In CMD
platzieren Sie [./script]
Ihr Skript sollte automatisch ausgeführt werden
Sie können auch WORKDIR
als /root
angeben, dann werden Sie beim Starten eines Containers automatisch in root platziert
Zusätzlich zu den oben genannten Antworten:
Wenn Sie Ihre .sh-Skriptdatei unter Windows erstellt/bearbeitet haben, stellen Sie sicher, dass sie mit Zeilenenden im Unix-Format gespeichert wurde. Standardmäßig konvertieren viele Editoren in Windows Unix-Zeilenenden in das Windows-Format, und Linux erkennt kein shebang (#!/bin/sh) am Anfang der Datei. Daher wird Linux die Fehlermeldung ausgeben, als ob kein shebang vorhanden wäre.
Tipps: