J'essaie d'exécuter un script pendant mon processus de construction dans mon fichier Docker. Mais cela ne semble pas fonctionner.
J'ai essayé de cette façon:
FROM php:7-fpm
ADD bootstrap.sh /
ENTRYPOINT ["/bin/bash", "/bootstrap.sh"]
Aussi de cette façon:
FROM php:7-fpm
ADD bootstrap.sh /
RUN bash -c "/bootstrap.sh"
Et aussi en exécutant mon conteneur en cours d'exécution:
docker exec symfony /bin/bash -c "/bootstrap.sh"
Rien ne semble fonctionner.
Savez-vous comment le faire?
RUN
et ENTRYPOINT
sont deux manières différentes d'exécuter un script.
RUN
signifie qu'il crée un conteneur intermédiaire, exécute le script et fige le nouvel état de ce conteneur dans une nouvelle image intermédiaire. Le script ne sera pas exécuté après cela: votre image finale est supposée refléter le résultat de ce script.
ENTRYPOINT
signifie que votre image (qui n'a pas encore exécuté le script) créera un conteneur et exécutera ce script.
Dans les deux cas, le script doit être ajouté et un _RUN chmod +x /bootstrap.sh
_ est une bonne idée.
Il devrait également commencer par Shebang (comme _#!/bin/sh
_)
Compte tenu de votre script ( KevinRaimbaud/docker-symfony/docker/php/bootstarp.sh
: quelques commandes _git config --global
_), il serait préférable d’exécuter ce script une fois dans votre fichier Docker, mais en veillant à utiliser le bon utilisateur ( le fichier de configuration global git est% HOME% /. gitconfig, qui par défaut est/root)
Ajouter à votre fichier Docker :
_RUN /bootstart.sh
_
Ensuite, lors de l'exécution d'un conteneur, vérifiez le contenu de _/root/.gitconfig
_ pour confirmer que le script a été exécuté.
Essayez de créer un script avec la commande ADD
et la spécification du répertoire de travail. Comme ceci ("script" est le nom du script et /root/script.sh
est là où vous le voulez dans le conteneur, le chemin peut être différent:
ADD script.sh /root/script.sh
Dans ce cas, ADD
doit précéder CMD
, si vous avez un BTW, c'est une méthode intéressante pour importer des scripts dans n'importe quel emplacement du conteneur à partir de la machine hôte.
Dans CMD
place [./script]
Il devrait exécuter automatiquement votre script
Vous pouvez également spécifier WORKDIR
comme /root
, vous serez automatiquement placé à la racine lors du démarrage d'un conteneur.
En plus des réponses ci-dessus:
Si vous avez créé/modifié votre fichier de script .sh sous Windows, assurez-vous qu'il a été enregistré avec une ligne se terminant au format Unix . Par défaut, de nombreux éditeurs Windows convertissent les fins de ligne Unix au format Windows et Linux ne reconnaît pas Shebang (#!/Bin/sh) au début du fichier. Donc, Linux produira le message d'erreur comme s'il n'y avait pas de Shebang.
Conseils: