Exécuter un script dans un Dockerfile
Je suis en train de lancer un script au cours de mon processus de construction dans mon Dockerfile.
Mais il 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 bu de l'exécution de ma course conteneur:
docker exec symfony /bin/bash -c "/bootstrap.sh"
Rien ne semble fonctionner.
Savez-vous comment le faire?
- Ne
bootstarp.sh
ont l'exécutable ensemble de bits? - Comme ça fait un chmod +x /bootstarp.sh ?
- Avec "ne fonctionne pas", ce qui se passe exactement? Fait-il une erreur? Le fichier est présent à l'intérieur de l'image? Si vous
docker exec -it symfony bash
à l'intérieur du conteneur, vous pouvez lancer manuellement le script, et vérifiez son contenu? (cat bootstarp.sh
)? - essayez ceci:
docker exec symfony /bin/bash /bootstarp.sh
et laissez-moi savoir la sortie. - Ermahgerd bootstarp!
Vous devez vous connecter pour publier un commentaire.
RUN
etENTRYPOINT
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 de figer le nouvel état du conteneur dans une nouvelle image intermédiaire. Le script ne sera pas exécuté après que: votre image finale est censée refléter le résultat de ce script.ENTRYPOINT
signifie que votre image (qui n'a pas exécuté le script encore) va créer un conteneur, et exécute le script.Dans les deux cas, le script doit être ajouté, et un
RUN chmod +x /bootstrap.sh
est une bonne idée.Il devrait aussi commencer avec un shebang (comme
#!/bin/sh
)Compte tenu de votre script (
KevinRaimbaud/docker-symfony/docker/php/bootstarp.sh
: un couple degit config --global
commandes), il serait préférable d'EXÉCUTER ce script une fois dans votre Dockerfile, mais en s'assurant d'utiliser le droit de l'utilisateur (global git config fichier %HOME%/.gitconfig, qui par défaut est le /la racine)Ajouter à votre Dockerfile:
Ensuite, lors de l'exécution d'un conteneur, vérifiez le contenu de
/root/.gitconfig
pour confirmer le script a été exécuté.bootstrap.sh
au lieu debootstarp.sh
: voir stackoverflow.com/a/1254561/6309Essayer de créer un script avec
ADD
de commande et les spécifications de répertoire de travailComme ceci("script" est le nom du script et
/root/script.sh
est où vous le souhaitez dans le conteneur, il peut être différent de chemin d'accès:Dans ce cas
ADD
doit venir avantCMD
, si vous en avez unBTW c'est cool façon d'importer des scripts à n'importe quel endroit dans le récipient de la machine hôte
Dans
CMD
place[./script]
Il devrait automatiquement l'exécution de votre script
Vous pouvez également spécifier
WORKDIR
comme/root
, puis vous l être automatiquement placé dans la racine, lors du démarrage d'un conteneurOutre les réponses ci-dessus:
Si vous avez créé/modifié votre .sh fichier de script dans Windows, assurez-vous qu'il a été enregistré avec des caractères de fin de ligne au format Unix. Par défaut, de nombreux éditeurs dans Windows convertir 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 si il n'est pas inclus.
Conseils:
Ensuite, vous pouvez faire les fins de ligne visible en appuyant sur Ctrl-R Ctrl-W. Et à définir Linux style terminaisons vous pouvez appuyer sur Ctrl-R Ctrl-L. Pour Windows, appuyez sur Ctrl-R Ctrl-C.