Comment modifier une image docker créée à partir d'une image existante

Basé sur un howto, j'ai créé une nouvelle image basée sur un existant.

maintenant je n'ai pas de fichier Dockerfile et il se passe des choses, quand le conteneur commence

Je ne peux pas changer, c'est à quoi il ressemble pour moi.

y a-t-il un moyen de modifier les choses qui ont été configurées dans le fichier Dockerfile de l'image de base que j'ai utilisée ?

par exemple: le conteneur exécute un script bash quand il démarre, je veux le changer.

18
demandé sur michabbb 2014-11-24 15:40:24

3 réponses

pour répondre À vos q: "le conteneur exécute un script bash quand il démarre, je veux le changer". Supposons que vous souhaitez exécuter /script.sh (partie de l'image) au lieu de la valeur par défaut, vous pouvez instancier un conteneur en utilisant:

docker run --entrypoint /script.sh repo/image

Si script.sh ne fait pas partie de l'image et/ou vous préférez ne pas avoir à la spécifier explicitement à chaque fois avec --entrypoint comme ci-dessus, vous pouvez préparer une image qui contient et exécute votre propre script.sh:

  1. créer un répertoire vide et copier ou créer script.sh
  2. Créer Dockerfile avec le contenu suivant:

    FROM repo/image
    ADD script.sh /
    ENTRYPOINT /script.sh
    
  3. docker build -t="myimage" .

  4. docker run myimage

Notes:

  • Lors de l'exécution du conteneur (étape 4), il n'est plus nécessaire de spécifier --entrypoint puisque nous l'avons fait défaut dans le Dockerfile.
  • C'est très simple, pas besoin de inscrivez - vous au Docker hub ou à toute autre chose du genre (bien que cela soit bien sûr recommandé à temps ;-)
17
répondu sxc731 2017-06-17 18:48:01

si le lancement du conteneur avec la commande du tutoriel échoue, votre image de base a très probablement introduit un point D'entrée. Toutes les commandes que vous spécifiez pour docker run sera ajouté en option à la commande ENTRYPOINT. Ainsi, compte tenu d'un point D'entrée de par exemple /usr/bin/somescript,

docker run -d --name newguest -p 8080:80 mymod/httpd:v1 /usr/sbin/httpd -D FOREGROUND

va faire exécuter

/usr/bin/somescript /usr/sbin/httpd -D FOREGROUND

au lieu de

/usr/sbin/httpd -D FOREGROUND

pour vous débarrasser du point D'entrée, utilisez le --entrypoint option:

docker run --entrypoint "" -d --name newguest -p 8080:80 mymod/httpd:v1 /usr/sbin/httpd -D FOREGROUND
3
répondu Harald Albers 2014-11-25 09:53:58

il suffit de créer un nouveau fichier Dockerfile dans un répertoire vide. Démarrer le fichier Dockerfile avec

FROM repo/image 

où "repo/image" est l'id de l'image que vous utilisez actuellement.

et ajouter vos personnalisations ci-dessous.

de cette façon vous construisez une nouvelle image qui est basée sur une autre image.

en particulier, pour changer la commande qui s'exécute au démarrage, mettez une ligne CMD et/ou ENTRYPOINT.

2
répondu Günter Zöchbauer 2014-11-24 13:37:11