2014-07-26 11 views
5

Voglio montare s3fs all'interno del contenitore docker.S3fs non è in grado di montare all'interno del contenitore docker?

immagine finestra mobile che ho fatto con s3fs, e ha fatto in questo modo:

host$ docker run -it --rm docker/s3fs bash 
[ [email protected]:~ ]$ 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 

Visualizzazione "Operazione non consentita" errore.

Così ho cercato su google, e ha fatto come questo (l'aggiunta di --privileged = true) di nuovo:

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

Poi, montaggio non presenta errori, ma se il comando ls correre, "Trasporto endpoint non è collegato" Errore è accaduto.

Come posso montare s3fs all'interno del contenitore docker? È impossibile?

[AGGIORNATO]

Aggiungi configurazione 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 

risposta

6

Non sono sicuro di quello che hai fatto che non ha funzionato, ma sono stato in grado di ottenere questo a lavorare in questo modo:

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 

Dopo aver costruito con:

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

ho eseguito il contenitore con:

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

e poi all'interno del contenitore:

[email protected]:/# s3fs s3bucket /s3bucket 
[email protected]:/# ls /s3bucket 
testing.this.out work.please working 
[email protected]:/# 

che elencava correttamente i file nel mio s3bucket.

È necessario assicurarsi che il kernel sul computer host supporti il ​​fusibile, ma sembrerebbe che lo abbiate già fatto?

Nota: il punto di montaggio S3 non mostrerà/funzionerà dall'interno di altri contenitori quando si utilizzano le direttive del volume --volume o --volumes-from. Ad esempio:

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

non restituisce alcun file anche se nel bucket sono presenti file.

+1

Grazie! Metto alla prova la tua procedura, ha funzionato come un incantesimo. Ma anche, come dici tu, non può essere montato da un altro contenitore ... C'è un modo per usarlo da un altro contenitore? – kochizufan

+5

'--privileged' è ciò che fa, purtroppo questo funziona solo durante la fase di esecuzione e non la fase di costruzione. – buley

Problemi correlati