我想在 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
然后,mounting not 显示错误,但是如果运行 ls 命令,会出现“Transport endpoint is not connected”的错误。
如何在 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
最佳答案
我不确定你做了什么没用,但我能够让它像这样工作:
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 中的文件。
您确实需要确保主机上的内核支持 fuse,但您似乎已经这样做了?
注意:当使用 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 ..
即使存储桶中有文件也不返回任何文件。
https://stackoverflow.com/questions/24966347/
相关文章:
python - 如何将包含所有依赖项的 python 包安装到 Docker 镜像中?
macos - 在 docker 中运行 Webpack-dev-server 比在本地机器上运行要
docker - Jenkins 2.0 : Running SBT in a docker con
java - 如何在Docker中初始化数据库后启动flyway
docker - 如何使用 docker-compose yml 文件进行生产?
php - 在双 nginx 反向代理中正确处理 request_uri?
networking - 如何将 Docker 网络暴露给主机?
docker - 是否可以使用 Winscp 连接到正在运行的 docker 容器?