Ich versuche, während meines Erstellungsprozesses ein Skript in meiner Docker-Datei 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 auch bu meinen laufenden Container ausführen:
docker exec symfony /bin/bash -c "/bootstrap.sh"
Nichts scheint zu funktionieren.
Weißt du, wie man es macht?
docker
dockerfile
Kevin
quelle
quelle
bootstarp.sh
das ausführbare Bit gesetzt?docker exec -it symfony bash
im Container befinden, können Sie das Skript manuell ausführen und dessen Inhalt überprüfen? (cat bootstarp.sh
)?docker exec symfony /bin/bash /bootstarp.sh
und lassen Sie mich die Ausgabe wissen.Antworten:
RUN
undENTRYPOINT
sind zwei verschiedene Möglichkeiten, ein Skript auszuführen.RUN
bedeutet, dass ein Zwischencontainer erstellt, das Skript ausgeführt und der neue Status dieses Containers in einem neuen Zwischenabbild eingefroren wird. Das Skript wird danach nicht mehr ausgeführt: Ihr endgültiges Bild 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 a
RUN chmod +x /bootstrap.sh
ist eine gute Idee.Es sollte auch mit einem Shebang (wie
#!/bin/sh
) beginnenIn Anbetracht Ihres Skripts (
KevinRaimbaud/docker-symfony/docker/php/bootstarp.sh
: einigegit config --global
Befehle) ist es am besten, dieses Skript einmal in Ihrer Docker-Datei auszuführen, aber stellen Sie sicher, dass Sie den richtigen Benutzer verwenden (die globale Git-Konfigurationsdatei lautet% HOME% /. Gitconfig, was standardmäßig der Fall ist die / root one)Zu Ihrer Docker-Datei hinzufügen :
Überprüfen Sie dann beim Ausführen eines Containers den Inhalt von,
/root/.gitconfig
um sicherzustellen, dass das Skript ausgeführt wurde.quelle
bootstrap.sh
stattbootstarp.sh
: siehe stackoverflow.com/a/1254561/6309Zusätzlich zu den obigen Antworten:
Wenn Sie Ihre .sh-Skriptdatei unter Windows erstellt / bearbeitet haben, stellen Sie sicher, dass sie mit einer 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. Linux erzeugt also die Fehlermeldung, als ob es keinen Shebang gibt.
Tipps:
quelle
Versuchen Sie, ein Skript mit zu erstellen
ADD
Befehl und der Spezifikation des Arbeitsverzeichnisses ("Skript" ist der Name des Skripts und/root/script.sh
dort, wo Sie es im Container haben möchten, kann es einen anderen Pfad geben:In diesem Fall
ADD
muss es vorher kommenCMD
, wenn Sie eine BTW haben, ist es eine coole Möglichkeit, Skripte von einem Host-Computer an einen beliebigen Ort im Container zu importierenAn
CMD
Ort und Stelle[./script]
Es sollte Ihr Skript automatisch ausführen
Sie können auch festlegen ,
WORKDIR
wie/root
, you'l dann automatisch in Stamm platziert wird, auf einen Behälter Startquelle
script.sh
script.sh
sich auf denDockerfile
Es wird empfohlen, diese
COPY
Option nichtADD
beim Kopieren aus dem lokalen Dateisystem in das Image zu verwenden. Außerdem würde ich empfehlen, einen Unterordner zu erstellen, in dem Sie Ihre Inhalte ablegen können. Wenn nichts anderes, hält es die Dinge aufgeräumt. Stellen Sie sicher, dass Sie das Skript mit als ausführbar markierenchmod
.Hier erstelle ich einen
scripts
Unterordner , in dem ich mein Skript ablegen und ausführen kann:quelle