Can s3fs mount docker container?

I want to install s3fs inside a docker container.

I took a docker image with s3fs and did this:

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 

Error display "Operation not allowed."

So, I googled and did this (adding --privileged = true) again:

 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 

Then the installation does not show an error, but if you run the ls command, then the "Transport endpoint is not connected" error occurred.

How to mount s3fs inside docker container? It's impossible?

[UPDATED]

Add Dockerfile configuration.

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 
+6
source share
1 answer

I'm not sure what you did that didn't work, but I was able to get this to work as follows:

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 

After creating with:

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

I launched the container using

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

and then inside the container:

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

which successfully listed files in my s3bucket.

You need to make sure that the kernel on your host supports fuses, but it looks like you already did this?

Note. Your S3 mount point will not display / work from other containers when using the Docker -volume or -volumes-from directives. For instance:

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

does not return files, even if there are files in the bucket.

+7
source

Source: https://habr.com/ru/post/972873/


All Articles