J'essaie de docker certains services pour le développement sur ma machine et je me demande comment docker run --volume=..
travaux. Par exemple, si je fais quelque chose comme
docker run --volume=/path/to/data:/data [...]
volonté /path/to/data
être (re) créé localement seulement s'il n'existe pas? Les données initiales sont-elles copiées à partir de l'image du conteneur?
Des liens vers la documentation pertinente seraient appréciés.
Le --volume
est décrite dans docker run
documents de référence , qui vous transfère vers les documents dédiés gérés dans des conteneurs docs, qui vous transmet ensuite sur les Lier les montures docs.
Là, ça dit:
Si tu utilises
-v
ou--volume
pour monter un fichier ou un répertoire qui n'existe pas encore sur l'hôte Docker,-v
créera le point final pour vous. Il est toujours créé sous forme de répertoire.
Oui, le répertoire sur l'hôte FS ne sera créé que s'il n'existe pas déjà.
En même temps, Docker ne copiera rien de l'image dans le volume monté sur bind, donc le chemin de montage apparaîtra comme un répertoire vide à l'intérieur du conteneur. Tout ce qui était dans l'image sera caché.
Si vous avez besoin de copier des données originales, vous devez implémenter cette fonctionnalité vous-même. Heureusement, c'est une chose assez facile à faire.
RUN mv /data /original-data
ADD entrypoint.sh /entrypoint.sh
ENTRYPOINT ['/entrypoint.sh']
Le script entrypoint.sh
pourrait ressembler à ceci (exemple simplifié):
#!/bin/bash
set -e
SOURCE_DIR=/original-data
TARGET_DIR=/data
if [ $(find $TARGET_DIR -maxdepth 0 -type d -empty) 2>/dev/null) ]; then
cp -r --preserve-all $SOURCE_DIR/* $TARGET_DIR/
fi
# continue Docker container initialization, execute CMD
exec $@
S'il y a déjà un script de point d'entrée dans votre image, vous pouvez simplement y ajouter la logique appropriée.