安装 davfs2 卷时无法打开 docker 容器中的熔断器设备

问题描述 投票:0回答:5

当我尝试在 docker 容器上挂载 davfs2 卷时遇到以下错误:

geoserver@8e8091d97157:~$ mount owncloud/
/sbin/mount.davfs: loading kernel module fuse
/sbin/mount.davfs: loading kernel module fuse failed
/sbin/mount.davfs: waiting for /dev/fuse to be created
/sbin/mount.davfs: can't open fuse device
/sbin/mount.davfs: trying coda kernel file system
/sbin/mount.davfs: no free coda device to mount

Dockerfile 具有以下内容:

FROM debian:jessie

ENV DEBIAN_FRONTEND noninteractive
ENV TERM linux

# environment variables
ENV GEOSERVER_PASS  geoserver

RUN apt-get update
RUN apt-get install -y davfs2 fuse

RUN groupadd --gid 999 geoserver
RUN useradd -ms /bin/bash --home /home/geoserver \
        -p $(echo "print crypt("${GEOSERVER_PASS:-geoserver}", "salt")" | perl) \
        --uid 999 --gid 999 geoserver

USER geoserver
RUN mkdir /home/geoserver/owncloud
RUN mkdir /home/geoserver/.davfs2

USER root
ADD secrets /home/geoserver/.davfs2/secrets
RUN chown geoserver:geoserver /home/geoserver/.davfs2/secrets
RUN chmod 0600 /home/geoserver/.davfs2/secrets

RUN chmod u+s /sbin/mount.davfs
RUN perl -p -i -e "s/#\s*use_locks\s*1/use_locks 0/" /etc/davfs2/davfs2.conf
RUN adduser geoserver davfs2
RUN echo "https://my-owncloud-server.org/owncloud/remote.php/webdav /home/geoserver/owncloud davfs rw,user,noauto 0 0" >> /etc/fstab

设备 /dev/fuse 存在

root@8e8091d97157:/# ls -l /dev/fuse
crw-rw-rw- 1 root root 10, 229 Oct 18 12:06 /dev/fuse

但是挂载失败... 我在日志中没有看到有趣的事情:

/var/log/daemon.log

root@8e8091d97157:/# tail /var/log/daemon.log 
Oct 18 12:36:03 8e8091d97157 mount.davfs: davfs2 1.5.2
Oct 18 12:36:04 8e8091d97157 mount.davfs: the server certificate is not trusted
Oct 18 12:36:04 8e8091d97157 mount.davfs:   issuer: TERENA, Amsterdam, Noord-Holland, NL
Oct 18 12:36:04 8e8091d97157 mount.davfs:   subject: Domain Control Validated
Oct 18 12:36:04 8e8091d97157 mount.davfs:   identity: owncloud-mshe.univ-fcomte.fr
Oct 18 12:36:04 8e8091d97157 mount.davfs:   accepted by user

/var/log/调试

root@8e8091d97157:/# tail /var/log/debug 
Oct 18 12:36:03 8e8091d97157 mount.davfs: davfs2 1.5.2

/var/log/auth.log

root@8e8091d97157:/# tail /var/log/auth.log 
Oct 18 12:35:59 8e8091d97157 su[890]: Successful su for geoserver by root
Oct 18 12:35:59 8e8091d97157 su[890]: + ??? root:geoserver
Oct 18 12:35:59 8e8091d97157 su[890]: pam_env(su:session): Unable to open env file: /etc/default/locale: No such file or directory
Oct 18 12:35:59 8e8091d97157 su[890]: pam_unix(su:session): session opened for user geoserver by (uid=0)
Oct 18 12:36:09 8e8091d97157 su[890]: pam_unix(su:session): session closed for user geoserver

所以一切看起来都很正常。 我很乐意得到一些帮助。 谢谢。

欧内斯特。

docker debian dockerfile mount fuse
5个回答
3
投票

谢谢,添加成功挂载了

--privileged --cap-add=SYS_ADMIN --device /dev/fuse

进入 docker run 命令。


1
投票

那些安全选项太开放了。 FUSE 支持现已记录在 Docker 运行时权限。您所需要的只是 -cap-add SYS_ADMIN --device /dev/fuse


0
投票

我找到了解决办法。事实上,正如 DockerCVMFS 文档中所解释的那样,“可以在容器内运行 FUSE 文件系统,但必须在主机系统上启用 FUSE。Docker 不会允许您加载无法加载的内核模块主持人”。 因此,我尝试在主机中加载模块保险丝,如docker容器中的modprobe

中所述 我使用以下命令启动容器,现在挂载正常了:

docker run --name geosync_ssh_data_1 --privileged --cap-add=ALL -v /dev:/dev -v /lib/modules:/lib/modules geosync_ssh_data

该解决方案包括树步骤:

Run the container in privileged mode (--privileged) Add all capabilities (--cap-add=ALL) Passthrough /lib/modules into the container (-v /lib/modules:/lib/modules)

希望有帮助。

还有一个问题:这是唯一的方法吗?

欧内斯特。

我无法使用 docker-compose 和这些附加设置让它工作。有人可以建议吗?修复后,我将更改此答案以反映使用 docker-compose 的正确方法。

0
投票
在容器加载后运行时,它在没有 cap_add、/dev/fuse 设备或 /lib/modules 卷的情况下完美工作 - 从 dockerfile 运行时它只是无法挂载(与 OP 发布的错误完全相同) )。想知道 docker-compose.yml 文件中是否存在语法问题,这里是:

version: '3' services: web: container_name: mycontainer privileged: true cap_add: - SYS_ADMIN devices: - /dev/fuse build: context: ./ dockerfile: docker/app/Dockerfile ports: - 8080:80 volumes: - /var/log - ./:/var/www/html/public - /lib/modules:/lib/modules env_file: - .env

这对我有用

0
投票
services: zurg: image: ghcr.io/debridmediamanager/zurg-testing:latest container_name: zurg restart: unless-stopped ports: - 9999:9999 volumes: - ./plex_update.sh:/app/plex_update.sh - ./config.yml:/app/config.yml - zurgdata:/app/data rclone: image: rclone/rclone:latest container_name: rclone restart: unless-stopped environment: TZ: Europe/Berlin PUID: 1000 PGID: 1000 volumes: - /mnt/zurg:/data:rshared - ./rclone.conf:/config/rclone/rclone.conf privileged: true security_opt: - apparmor:unconfined depends_on: - zurg command: "mount zurg: /data --allow-other --allow-non-empty --dir-cache-time 10s --vfs-cache-mode full" volumes: zurgdata:


© www.soinside.com 2019 - 2024. All rights reserved.