s3fs无法安装在docker容器内吗?

 岩律_619 发布于 2023-01-01 09:37

我想在docker容器中挂载s3fs.

我用s3fs制作了docker图像,并且这样做:

host$ docker run -it --rm docker/s3fs bash
[ root@container:~ ]$ s3fs s3bucket /mnt/s3bucket -o allow_other -o allow_other,default_acl=public-read -ouse_cache=/tmp
fuse: failed to open /dev/fuse: Operation not permitted

显示"不允许操作"错误.

所以我用谷歌搜索,并做了这样(再次添加--privileged = true):

host$ docker run -it --rm --privileged=true docker/s3fs bash
[ root@container:~ ]$ s3fs s3bucket /mnt/s3bucket -o allow_other -o allow_other,default_acl=public-read -ouse_cache=/tmp
[ root@container:~ ]$ ls /mnt/s3bucket
ls: cannot access /mnt/s3bucket: Transport endpoint is not connected
[ root@container:~ ]$ fusermount -u /mnt/s3bucket
[ root@container:~ ]$ s3fs s3bucket /mnt/s3bucket -o allow_other -o allow_other,default_acl=public-read -ouse_cache=/tmp
[ root@container:~ ]$ ls /mnt/s3bucket
ls: cannot access /mnt/s3bucket: Transport endpoint is not connected

然后,安装不显示错误,但如果运行ls命令,则"传输端点未连接"发生错误.

如何在docker容器中挂载s3fs?这不可能吗?

[更新]

添加Dockerfile配置.

Dockerfile:

FROM dockerfile/ubuntu

RUN apt-get update
RUN apt-get install -y build-essential
RUN apt-get install -y libfuse-dev
RUN apt-get install -y fuse
RUN apt-get install -y libcurl4-openssl-dev
RUN apt-get install -y libxml2-dev
RUN apt-get install -y mime-support

RUN \
  cd /usr/src && \
  wget http://s3fs.googlecode.com/files/s3fs-1.74.tar.gz && \
  tar xvzf s3fs-1.74.tar.gz && \
  cd s3fs-1.74/ && \
  ./configure --prefix=/usr && \
  make && make install

ADD passwd/passwd-s3fs /etc/passwd-s3fs
ADD rules.d/99-fuse.rules /etc/udev/rules.d/99-fuse.rules
RUN chmod 640 /etc/passwd-s3fs

RUN mkdir /mnt/s3bucket

rules.d/99-fuse.rules:

KERNEL==fuse, MODE=0777

damick.. 10

我不确定你做了什么不起作用,但我能够让这个工作像这样:

Dockerfile:

FROM ubuntu:12.04

RUN apt-get update -qq
RUN apt-get install -y build-essential libfuse-dev fuse-utils libcurl4-openssl-dev libxml2-dev mime-support automake libtool wget tar

RUN wget https://github.com/s3fs-fuse/s3fs-fuse/archive/v1.77.tar.gz -O /usr/src/v1.77.tar.gz
RUN tar xvz -C /usr/src -f /usr/src/v1.77.tar.gz
RUN cd /usr/src/s3fs-fuse-1.77 && ./autogen.sh && ./configure --prefix=/usr && make && make install

RUN mkdir /s3bucket

建成之后:

docker build --rm -t ubuntu/s3fs:latest .

我运行了容器:

docker run -it -e AWSACCESSKEYID=obscured -e AWSSECRETACCESSKEY=obscured --privileged ubuntu/s3fs:latest bash

然后在容器内:

root@efa2689dca96:/# s3fs s3bucket /s3bucket
root@efa2689dca96:/# ls /s3bucket
testing.this.out  work.please  working
root@efa2689dca96:/#

哪个成功地列出了我的s3bucket中的文件.

你需要确保主机上的内核支持保险丝,但看起来你已经这样做了吗?

注意:使用Docker的--volume或--volumes-from指令时,您的S3挂载点将不会在其他容器内显示/工作.例如:

docker run -t --detach --name testmount -v /s3bucket -e AWSACCESSKEYID=obscured -e AWSSECRETACCESSKEY=obscured --privileged --entrypoint /usr/bin/s3fs ubuntu/s3fs:latest -f s3bucket /s3bucket
docker run -it --volumes-from testmount --entrypoint /bin/ls ubuntu:12.04 -ahl /s3bucket
total 8.0K
drwxr-xr-x  2 root root 4.0K Aug 21 21:32 .
drwxr-xr-x 51 root root 4.0K Aug 21 21:33 ..

即使存储桶中有文件,也不返回任何文件.

1 个回答
  • 我不确定你做了什么不起作用,但我能够让这个工作像这样:

    Dockerfile:

    FROM ubuntu:12.04
    
    RUN apt-get update -qq
    RUN apt-get install -y build-essential libfuse-dev fuse-utils libcurl4-openssl-dev libxml2-dev mime-support automake libtool wget tar
    
    RUN wget https://github.com/s3fs-fuse/s3fs-fuse/archive/v1.77.tar.gz -O /usr/src/v1.77.tar.gz
    RUN tar xvz -C /usr/src -f /usr/src/v1.77.tar.gz
    RUN cd /usr/src/s3fs-fuse-1.77 && ./autogen.sh && ./configure --prefix=/usr && make && make install
    
    RUN mkdir /s3bucket
    

    建成之后:

    docker build --rm -t ubuntu/s3fs:latest .
    

    我运行了容器:

    docker run -it -e AWSACCESSKEYID=obscured -e AWSSECRETACCESSKEY=obscured --privileged ubuntu/s3fs:latest bash
    

    然后在容器内:

    root@efa2689dca96:/# s3fs s3bucket /s3bucket
    root@efa2689dca96:/# ls /s3bucket
    testing.this.out  work.please  working
    root@efa2689dca96:/#
    

    哪个成功地列出了我的s3bucket中的文件.

    你需要确保主机上的内核支持保险丝,但看起来你已经这样做了吗?

    注意:使用Docker的--volume或--volumes-from指令时,您的S3挂载点将不会在其他容器内显示/工作.例如:

    docker run -t --detach --name testmount -v /s3bucket -e AWSACCESSKEYID=obscured -e AWSSECRETACCESSKEY=obscured --privileged --entrypoint /usr/bin/s3fs ubuntu/s3fs:latest -f s3bucket /s3bucket
    docker run -it --volumes-from testmount --entrypoint /bin/ls ubuntu:12.04 -ahl /s3bucket
    total 8.0K
    drwxr-xr-x  2 root root 4.0K Aug 21 21:32 .
    drwxr-xr-x 51 root root 4.0K Aug 21 21:33 ..
    

    即使存储桶中有文件,也不返回任何文件.

    2023-01-01 09:41 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有