web-dev-qa-db-fra.com

Script de démarrage pour un conteneur de menu fixe

J'ai un conteneur Docker déjà en cours d'exécution. J'ai apporté quelques modifications à la configuration, disons avoir ajouté des informations sur l'hôte dans/etc/hosts à l'intérieur du conteneur. Comment enregistrer les modifications afin que, lors de la prochaine ouverture d’un shell interactif dans le conteneur, je n’ai plus à refaire les mêmes opérations? Pour l'instant, j'ai créé un mini-script en tant que addhosts.sh, comme indiqué ci-dessous, dans le conteneur et je dois l'exécuter à chaque fois.

echo "1.2.3.4 server1.example.com gluster1" >> /etc/hosts
echo "5.6.7.8 server2.example.com gluster2" >> /etc/hosts

C'est l'un des cas. De même, j'ai besoin que toute ma configuration soit intacte. S'il vous plaît, ne suggérez pas de dockerfile car je ne crée pas d'image, je vais juste entrer dans le conteneur. 

8
jagatjyoti

Vous pouvez valider les modifications que vous avez apportées en:

Référence de commande courte:

docker commit <container id or name>  <repository name>/<your image name>:<tage aka version>

Exemple:

docker commit c3f279d17e0a  svendowideit/testimage:version3

Référence complète:

Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes

Options:
  -a, --author string    Author (e.g., "John Hannibal Smith <[email protected]>")
  -c, --change value     Apply Dockerfile instruction to the created image (default [])
      --help             Print usage
  -m, --message string   Commit message
  -p, --pause            Pause container during commit (default true)

Ensuite, vous pouvez utiliser docker images pour afficher votre nouvelle image après la validation.

Pour exécuter un conteneur à partir de votre nouvelle image:

docker run -d svendowideit/testimage:version3 <optional startup command>

Une autre façon serait de créer votre propre image via: dockerfile, je la mets simplement ici pour que nous puissions aider les autres.

8
Farhad Farahi

En supposant que vous ne souhaitiez pas enregistrer les modifications dans une nouvelle image: 

docker exec -it container_id echo "1.2.3.4 server1.example.com gluster1" >> /etc/hosts
docker exec -it container_id echo "5.6.7.8 server2.example.com gluster2" >> /etc/hosts

Cela permettrait de se connecter au conteneur, d'exécuter la commande et de quitter sans tuer le conteneur. 

Notez la différence entre les éléments suivants:

docker exec -it container_id ... = does not kill the container. 
docker run -it container_id   ...= kills the container 
4
xen-dara

Utilisez docker commit pour prendre un instantané de votre conteneur.

Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes

Options:
  -a, --author string    Author (e.g., "John Hannibal Smith <[email protected]>")
  -c, --change value     Apply Dockerfile instruction to the created image (default [])
      --help             Print usage
  -m, --message string   Commit message
  -p, --pause            Pause container during commit (default true)

Example: docker commit c3f279d17e0a svendowideit/testimage:version3

Regardez https://docs.docker.com/engine/reference/commandline/commit/

Pour exécuter un instantané d'un conteneur de menu fixe, ajoutez la version à exécuter. Comme pour l'exemple

docker run svendowideit/testimage:version3

2
Issam EL-ATIF