2017-08-21 6 views
0

Je suis nouveau à docker et j'essaye de traiter beaucoup de données sur AWS. À l'heure actuelle, l'entrée pour les scripts que je veux exécuter en utilisant mon image parente est d'environ 20G.Montage des volumes Docker - la couche inscriptible est-elle utilisée?

D'abord, j'essayé de copier simplement les données dans mon image sur la couche inscriptible (en utilisant COPY), mais je suis l'erreur

Sending build context to Docker daemon 20.53 GB 

Error response from daemon: Error processing tar file(exit status 1): write /Input/dbsnp_138.b37.vcf: no space left on device

Je pensais que 20G serait trop beaucoup à stocker juste sur ma couche inscriptible.

Ensuite, j'ai regardé le montage d'un volume sur l'hôte du docker (en utilisant VOLUME), mais cela ne devrait-il pas d'abord être écrit sur la couche inscriptible? Cela ne me donnerait-il pas la même erreur?

+0

n ° Les données exposées à l'aide de '-v' ne sont pas * copié * dans votre conteneur. Il est directement exposé dans le conteneur sans nécessiter d'espace supplémentaire. – larsks

Répondre

0

Ainsi, la manière docker build fonctionne est ce, lorsque vous utilisez quelque chose comme ci-dessous

docker build . 

Il envoie le contenu du répertoire courant au démon Docker. Donc, si vous envoyez un contexte de 20 Go, vous aurez besoin de 20 Go d'espace supplémentaire. Lorsque vous montez des volumes sur une image en cours d'exécution, il monterait réellement votre dossier, donc aucun espace supplémentaire ne serait utilisé. Mais si vous supprimez le répertoire de l'intérieur du conteneur, le fichier sur l'hôte sera également supprimé.

Le montage du répertoire est donc une solution possible. En outre, s'il existe des fichiers dans votre répertoire actuel que vous ne souhaitez pas envoyer au démon docker en tant que contexte, vous devez utiliser un .dockerignore pour spécifier les fichiers à ignorer

+0

Merci pour votre réponse! Si je ne voulais pas monter un volume, c'est-à-dire envoyer les données au démon docker, serait-il possible d'étendre la taille du contexte? J'ai cherché les interwebs pendant quelque temps maintenant et je ne peux pas comprendre exactement ce que j'ai besoin de configurer. Essayer d'utiliser utiliser le --storage-opt dm.basesize = 20G ne semble pas fonctionner. – GenomicsLin

+0

Vous devriez le définir encore plus grand. Utilisez 'dm.basesize = 50G' et assurez-vous qu'il est correctement appliqué. Et définissez-les en utilisant '/ etc/docker/daemon.json' (https://docs.docker.com/engine/reference/commandline/dockerd/#options-per-storage-driver) –

+0

J'ai essayé de les paramétrer en utilisant le instructions sur le document mais j'ai l'erreur suivante: $ sudo dockerd --storage-opt dm.basesize = 50G INFO [0000] libcontainerd: nouveau processus containerd, pid: 4610 WARN [0000] containerd: bas RLIMIT_NOFILE changeant à max courant = 1024 max = 4096 Erreur lors du démarrage du démon: erreur lors de l'initialisation de graphdriver: overlay2: option inconnue dm.baseize Cela s'est produit après l'arrêt du docker et la suppression de/var/lib/docker. – GenomicsLin