Cette question provient d'un problème sur le référentiel de Docker:
https://github.com/docker/compose/issues/942
Je n'arrive pas à comprendre comment créer un conteneur de données (aucun processus en cours d'exécution) avec docker compose.
Cela dépend un peu de l'image que vous utilisez pour votre conteneur de données uniquement. Si votre image a une entrypoint
, vous devez l'écraser dans votre docker-compose.yml
. Par exemple, il s’agit d’une solution pour l’image officielle MySql de docker hub:
DatabaseData:
image: mysql:5.6.25
entrypoint: /bin/bash
DatabaseServer:
image: mysql:5.6.25
volumes_from:
- DatabaseData
environment:
MYSQL_ROOT_PASSWORD: blabla
Lorsque vous faites un docker-compose up
à ce sujet, vous obtenez un conteneur comme ..._DatabaseData_1
qui affiche un statut de Exited
lorsque vous appelez docker ps -a
. Un examen plus approfondi avec docker inspect
indiquera qu'il a un horodatage de 0
. Cela signifie que le conteneur n'a jamais été exécuté. Comme il est indiqué par le propriétaire de docker compose ici .
Maintenant, tant que vous ne faites pas un docker-compose rm -v
, votre conteneur de données uniquement (..._DatabaseData_1
) ne perdra pas ses données. Vous pouvez donc faire docker-compose stop
et docker-compose up
aussi souvent que vous le souhaitez.
Si vous souhaitez utiliser une image dédiée aux données, telle que tianon/true
, cela fonctionne de la même manière. Ici, vous n'avez pas besoin d'écraser la entrypoint
, car elle n'existe pas. Il semble que cette image et cette composition de docker posent quelques problèmes. Je ne l'ai pas essayé, mais cet article pourrait être utile de lire au cas où vous rencontriez des problèmes.
En général, il semble judicieux d'utiliser la même image pour votre conteneur de données uniquement que pour le conteneur qui y accède. Voir Folie du conteneur de données uniquement pour plus de détails.
Un conteneur de données uniquement (DOC) est un conteneur créé uniquement pour servir de fournisseur de volume. Le conteneur lui-même n'a pas d'autre fonction que celle de permettre aux autres conteneurs de monter son volume à l'aide de la directive volumes_from
.
Le DOC ne doit être exécuté qu'une seule fois pour créer le volume. D'autres conteneurs peuvent référencer les volumes qu'il contient même s'il est arrêté.
La question OP: Le docker-compose.yml
démarre le DOC chaque fois que vous effectuez un docker-compose up
. OP demande une option pour créer uniquement un conteneur et un volume, et non pour l'exécuter, en utilisant une sorte d'option create_only: true
.
Comme mentionné dans le numéro de la question du PO:
docker-compose.yml
et exécutez docker-compose up --no-recreate
(celui spécifié dans docker-compose.yml
ne sera pas recréé).tail -f /dev/null