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

我想在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 

显示“操作不允许”错误。

所以我google了,做了这样的(再加–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? 这是不可能的吗?

[更新]

添加Dockerfileconfiguration。

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 

我不知道你做了什么没有工作,但我能够得到这个工作是这样的:

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 

build设完成后:

 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 .. 

即使存在文件,也不会返回文件。