Docker 内接保险丝

Docker 内接保险丝,docker,fuse,Docker,Fuse,我试图在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", "r

我试图在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"]
当我运行程序安装保险丝时,我得到:
/bin/fusermount:FUSE device not found,请先尝试“modprobe FUSE”

如果在构建步骤中安装
kmod
并运行
modprobe fuse
,则会出现错误:

modprobe:ERROR:../libkmod/libkmod.c:557 kmod\u search\u moddep()无法打开moddep文件'/lib/modules/4.4.104-boot2docker/modules.dep.bin'


如何修复此问题?

作为一种解决方法,您可以在主机上执行
modprobe fuse
,然后使用
--device/dev/fuse
将设备放入容器中。无论如何,容器应该在特权模式下启动,以便使用
/dev/fuse
装载东西

运行docker映像的命令是:

docker run -d --rm --device /dev/fuse --privileged <image_id/name>
docker运行-d--rm--device/dev/fuse--privileged

关于Nickolay下面的回答,保险丝不严格要求使用
--privileged
标志。你最好避免给你的容器太多特权

您应该能够将其替换为
——cap add SYS\u ADMIN
,如下所示

docker run -d --rm \
           --device /dev/fuse \
           --cap-add SYS_ADMIN \
      <image_id/name>
docker运行-d--rm\
--设备/开发/保险丝\
--cap添加系统管理员\
有时这可能不起作用。在这种情况下,您应该尝试调整AppArmor配置文件,或者按如下方式禁用它:

docker run -d --rm \
           --device /dev/fuse \
           --cap-add SYS_ADMIN \
           --security-opt apparmor:unconfined \
      <image_id/name>
docker运行-d--rm\
--设备/开发/保险丝\
--cap添加系统管理员\
--安全装置:无限制\

最后,如果所有操作都失败,请使用--privileged标志。

您需要以privileged身份运行容器,或者,专门添加
SYS\u ADMIN

如何运行容器?您是否指定--privileged模式?我使用
docker run-it--rm
。添加
--privileged
无助于
modprobe
错误消息,也无助于FUSE消息。感谢您提供的解决方法。理想情况下,我希望它也能在OSX上工作,我不知道是否有任何方法可以在它上面模拟
/dev/fuse
。这可能是解决方案,因为docker监狱不运行自己的内核,所以您需要在监狱外加载模块,并且主机允许设备访问。小心并检查fuse设备是否可用于越狱。我知道我来晚了,但在OS X上,fuse for OS X工作得很好,可以通过
brew
安装:
brew安装osxfuse
,或者如Gary所述,应该非常小心地使用--privileged选项。更多细节(关于风险)在这篇中间帖子中:SYS_ADMIN cap是否基本上等同于在特权模式下运行容器?@Ibrahim SYS_ADMIN是其中之一——特权添加了,但特权也删除了Docker默认提供的更多保护(默认cgroup、seccomp配置文件等)因此,最终的结果是指定--cap add SYS_ADMIN要比--privilegedI think
--device/dev/fuse
安全得多,docker run cmd中不应包含这一点。这使容器能够访问主机的/dev/fuse,这不是请求的IIUC。@GenericRatzlaugh它是相同的内核,因此是相同的
/dev/fuse
。(设备文件基本上只是内核接口的别名。)您需要它与FUSE接口,但您可以使用用户名称空间从内核版本4.18开始添加隔离。有关详细信息,请参阅。@nickgryg关于使用--device/dev/fuse的响应更好