J'essaie d'installer et d'utiliser Fuse dans un conteneur Docker. Mon Dockerfile est le suivant:
FROM golang:1.8
WORKDIR /go/src/app
COPY . .
RUN apt-get update && apt-get install -y Fuse && rm -rf /var/lib/apt/lists/*
RUN go-wrapper download
RUN go-wrapper install
CMD ["go-wrapper", "run", "/mnt"]
Lorsque j'exécute le programme de montage Fuse, j'obtiens: /bin/fusermount: Fuse device not found, try 'modprobe Fuse' first
.
Si j'installe kmod
et que j'exécute modprobe Fuse
Pendant l'étape de génération, j'obtiens l'erreur:
modprobe: ERROR: ../libkmod/libkmod.c:557 kmod_search_moddep() could not open moddep file '/lib/modules/4.4.104-boot2docker/modules.dep.bin'
Comment puis-je réparer cela?
En ce qui concerne la réponse de Nickolay ci-dessous, le --privileged
le drapeau n'est pas strictement requis pour Fuse. Et vous mieux vaut éviter donner autant de privilèges à votre conteneur.
Vous devriez pouvoir faire fonctionner les choses en les remplaçant par --cap-add SYS_ADMIN
comme ci-dessous.
docker run -d --rm \
--device /dev/Fuse \
--cap-add SYS_ADMIN \
<image_id/name>
Parfois, cela peut ne pas fonctionner. Dans ce cas, vous devez essayer de modifier le profil AppArmor ou tout simplement le désactiver comme suit:
docker run -d --rm \
--device /dev/Fuse \
--cap-add SYS_ADMIN \
--security-opt apparmor:unconfined \
<image_id/name>
Enfin, si tout échoue, utilisez l'indicateur --privileged.
Tout comme une solution de contournement, vous pouvez faire le modprobe Fuse
sur votre hôte, puis en utilisant --device /dev/Fuse
pour mettre l'appareil dans le conteneur. Quoi qu'il en soit, le conteneur doit être démarré en mode privilégié pour monter des choses avec le /dev/Fuse
.
La commande pour exécuter l'image docker est:
docker run -d --rm --device /dev/Fuse --privileged <image_id/name>