Docker里面的FUSE

问题描述 投票:14回答:2

我正在尝试在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'

我怎样才能解决这个问题?

docker fuse
2个回答
12
投票

为了增加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。


5
投票

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

运行docker镜像的命令是:

docker run -d --rm --device /dev/fuse --privileged <image_id/name>
© www.soinside.com 2019 - 2024. All rights reserved.