web-dev-qa-db-fra.com

FUSE à l'intérieur de Docker

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?

17
Cydonia7

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.

14
Gery Vessere

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>
4
Nickolay