J'utilise la version 17.05.0 de Docker.
Au lieu d'utiliser le répertoire racine Docker: / var / lib / docker , j'utilise un répertoire / u01 qui est monté sur la VM à l'aide d'un partage NFS.
Répertoire racine du Docker: / u01 / docker
Pilote de stockage: overlay2
Step 2/14 : MAINTAINER RK error creating overlay mount to /u01/docker/overlay2/f5aebc4aa90797ccfab90bfb17a44314041b4694b26aa5a1e82eba95384f9924-init/merged: invalid argument
Maintenant, lorsque je lance le démon, le La commande docker pull fonctionne bien mais lorsque j'essaie de créer une image, elle génère l'erreur suivante:
# cat daemon.json
{
"data-root": "/u01/docker",
"storage-driver": "overlay2"
}
Je ne sais pas ce qui ne va pas ici.
3 Réponses :
Considérons deux choses:
overlay2 est le pilote de stockage par défaut, mais comme vous pouvez le voir dans documentation du pilote de stockage docker , n'est valide que pour xfs avec ftype = 1, ext4
Peut-être que votre / u01 / docker est dans un autre système de fichiers.
Si votre / u01 / docker est un xfs de type ftype = 1 ou ext4, vérifiez que les selinux sont désactivés.
Afin de vérifier que le système de support est compatible avec votre overlay2, vous pouvez exécuter:
$ docker info Containers: 0 Images: 0 Storage Driver: overlay2 Backing Filesystem: xfs <output truncated>
Vous ne devriez vraiment pas exécuter docker avec un serveur NFS comme système de fichiers de sauvegarde. Même si vous pouviez le faire fonctionner, cela serait lent et le problème de la distribution d'images à plusieurs hôtes a déjà été résolu avec les serveurs de registre et les couches réutilisables.
Le système de fichiers overlay2 lui-même est documenté comme nécessitant xfs avec ftype = 1 ou ext4 comme système de fichiers de sauvegarde, pas NFS.
Là où vous pouvez utiliser NFS, c'est avec les volumes montés dans des conteneurs pour les données persistantes. Ces volumes existeraient en dehors du conteneur et ne seraient pas enregistrés dans le registre, il est donc logique de les pousser vers NFS. Voici quelques exemples de différentes manières de monter un volume avec NFS:
# create a reusable volume
$ docker volume create --driver local \
--opt type=nfs \
--opt o=nfsvers=4,addr=nfs.example.com,rw \
--opt device=:/path/to/dir \
foo
# or from the docker run command
$ docker run -it --rm \
--mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=nfs.example.com\",volume-opt=device=:/host/path \
foo
# or to create a service
$ docker service create \
--mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=nfs.example.com\",volume-opt=device=:/host/path \
foo
# inside a docker-compose file
...
volumes:
nfs-data:
driver: local
driver_opts:
type: nfs
o: nfsvers=4,addr=nfs.example.com,rw
device: ":/path/to/dir"
...
Dans mon cas, la solution de contournement était étonnamment de restreindre le nombre de commandes / couches de construction du docker 'RUN', car si le nombre dépassait 60 couches / commandes, cela se terminait toujours par l'erreur de dossier 'fusionné' manquante, peu importe quel était le contenu de la commande, même une simple commande telle que RUN ls -la a abouti à cette erreur, si le nombre total de telles commandes était supérieur à environ 60, étrange. Le sous-dossier fusionné était toujours manquant, même si même lorsque j'ai généré automatiquement tous les sous-dossiers fusionnés, il était toujours créé à la volée une nouvelle couche avec un nouveau hachage, qui manquait ce sous-dossier.
pouvez-vous ajouter plus de détails s'il vous plaît? quelles commandes vous ont utilisées pour le résoudre?
C'est une solution de contournement, ce qui signifie que si vous aviez plus de fois la commande / le mot «RUN» dans votre fichier docker que 60 fois, cela cessait de fonctionner, donc je l'ai travaillé lorsque j'avais plus de 60 commandes RUN dans mon fichier, j'ai fait 60 commandes d'exécution dans 30 commandes en contaténant des commandes donc deux commandes d'exécution RUN ls -la , RUN date J'ai fusionné en une seule commande RUN comme celle-ci RUN ls -la && date
Merci @Evan Carrol pour une correction grammaticale d'une «solution de contournement fonctionnelle» qui pourrait ressembler à un trusim, même si c'était en quelque sorte une abréviation de la saisie «pour moi, l'approche de travail était une solution de contournement»
Même si vous tapiez cela, ce serait redondant. En quoi une «approche non fonctionnelle qui constitue une solution de contournement» serait-elle une contribution précieuse? ;)
Avez-vous vérifié que selinux est désactivé? docs.docker.com/storage/storagedriver/select-storage-driver a>