我正在尝试在Docker容器中安装和使用FUSE。我的Dockerfile如下:
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"]
当我运行安装FUSE的程序时,我得到:/bin/fusermount: fuse device not found, try 'modprobe fuse' first
。
如果我在构建步骤中安装kmod
并运行modprobe fuse
,我会收到错误:
modprobe: ERROR: ../libkmod/libkmod.c:557 kmod_search_moddep() could not open moddep file '/lib/modules/4.4.104-boot2docker/modules.dep.bin'
我怎样才能解决这个问题?
为了增加Nickolay上面的答案,对于保险丝,并不严格要求--privileged标志。而且你最好避免给你的容器提供那么多的特权。
您应该能够通过替换--cap-add SYS_ADMIN来完成工作,如下所示。
docker run -d --rm --device /dev/fuse --cap-add SYS_ADMIN <image_id/name>
有时这可能不起作用。在这种情况下,您应该尝试调整AppArmor配置文件,或者只是按如下方式禁用它:
docker run -d --rm --device /dev/fuse --cap-add SYS_ADMIN --security-opt apparmor:unconfined <image_id/name>
最后,如果全部失败,请使用--privileged flag。
就像解决方法一样,您可以在主机上执行modprobe fuse
,然后使用--device /dev/fuse
将设备放入容器中。无论如何,容器应该以特权模式启动,以便用/dev/fuse
挂载东西。
运行docker镜像的命令是:
docker run -d --rm --device /dev/fuse --privileged <image_id/name>