J'essaye d'exécuter un script pendant mon processus de construction dans mon Dockerfile. 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 faire?
docker
dockerfile
Kevin
la source
la source
bootstarp.sh
bit exécutable est-il défini?docker exec -it symfony bash
à l'intérieur du conteneur, pouvez-vous exécuter manuellement le script et vérifier son contenu? (cat bootstarp.sh
)?docker exec symfony /bin/bash /bootstarp.sh
et faites-moi savoir la sortie.Réponses:
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 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 censé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.Cela devrait aussi commencer par un shebang (comme
#!/bin/sh
)Compte tenu de votre script (
bootstarp.sh
: quelquesgit config --global
commandes), il serait préférable d'utiliserRUN
ce script une fois dans votreDockerfile
, mais en veillant à utiliser le bon utilisateur (legit config
fichier global est%HOME%/.gitconfig
, qui par défaut est/root
celui)Ajoutez à votre Dockerfile:
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é.la source
bootstrap.sh
au lieu debootstarp.sh
: voir stackoverflow.com/a/1254561/6309En 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 sous Windows convertiront les fins de ligne Unix au format Windows et Linux ne reconnaîtra pas shebang (#! / Bin / sh) au début du fichier. Ainsi Linux produira le message d'erreur comme s'il n'y avait pas de shebang.
Conseils:
la source
Essayez de créer un script avec la
ADD
commande et la spécification du répertoire de travail Comme ceci ("script" est le nom du script et/root/script.sh
est l'endroit où vous le souhaitez dans le conteneur, il peut s'agir d'un chemin différent:Dans ce cas
ADD
doit venir avantCMD
, si vous avez un BTW, c'est un moyen cool d'importer des scripts vers n'importe quel emplacement du conteneur à partir de la machine hôteEn
CMD
place[./script]
Il devrait exécuter automatiquement votre script
Vous pouvez également spécifier
WORKDIR
comme/root
, alors vous serez automatiquement placé en racine, au démarrage d'un conteneurla source
script.sh
script.sh
sont relatifs auDockerfile
Il est recommandé de l'utiliser
COPY
plutôt queADD
lorsque vous copiez du système de fichiers local vers l'image. En outre, je vous recommande de créer un sous-dossier dans lequel placer votre contenu. Si rien d'autre, cela garde les choses en ordre. Assurez-vous de marquer le script comme exécutable à l'aide dechmod
.Ici, je crée un
scripts
sous-dossier dans lequel placer mon script et l'exécuter à partir de:la source