amazon-web-services - s3fs 获取文件抛出输入/输出错误或无法从远程文件“/mnt/s3/”读取:失败
问题描述
我尝试使用 s3fs 设置 sftp,但面临文件访问错误。
我在入口点创建带有挂载 S3 存储桶的 docker 映像,我可以 ssh\sftp 到它的容器并查看 S3 存储桶中的文件和文件夹。但我不能得到这个文件:
sftp:
s get pin
Fetching /mnt/s3/pin to pin
/mnt/s3/pin 0% 0 0.0KB/s - stalled -
Couldn't read from remote file "/mnt/s3/pin" : Failure
SSH:
sftpusername@1234ebc1e2e3:~/s3$ cat pin
cat: pin: Input/output error
应该是什么原因?
这是入口点:
#!/bin/bash
adduser --disabled-password --gecos "" $SFTP_USER
echo "$SFTP_USER:$SFTP_PASSWORD" | chpasswd
echo "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" > ~/.passwd-s3fs
chmod 600 ~/.passwd-s3fs
mkdir -p /mnt/s3
s3fs $S3_BUCKET /mnt/s3 -o passwd_file=~/.passwd-s3fs -o allow_other -o uid=$(id -u $SFTP_USER)
ln -s /mnt/s3 /home/$SFTP_USER
echo "SFTP user: $SFTP_USER"
echo "S3 Bucket: $S3_BUCKET"
echo "Ready to accept connections..."
exec /usr/sbin/sshd -D
Dockerfile:
FROM ubuntu:16.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get -y update
RUN apt-get -y install openssh-server
RUN apt-get -y install automake autotools-dev g++ git libcurl4-gnutls-dev libfuse-dev libssl-dev libxml2-dev make pkg-config
RUN git clone https://github.com/s3fs-fuse/s3fs-fuse.git && \
cd s3fs-fuse && \
./autogen.sh && \
./configure && \
make && \
make install
RUN mkdir -p /var/run/sshd
COPY entrypoint /
RUN chmod +x /entrypoint
EXPOSE 22
ENTRYPOINT ["/entrypoint"]
构建图像:
docker build -t sftp/s3fs .
运行容器
docker run -p 22 --privileged --env AWS_ACCESS_KEY_ID --env AWS_SECRET_ACCESS_KEY --env SFTP_USER --env SFTP_PASSWORD --env SSH_KEY --env S3_BUCKET --env S3_KEY sftp/s3fs
之后我可以 ssh\sftp 到容器(这里是从 22 转发的端口,可以用 dokcer ps 检查)
sftp -P 32775 sftpusername@localhost
在容器内,我可以看到带有已安装 s3 存储桶(目录和文件)的 s3 存储桶。我可以创建新目录,删除创建的目录,但无法获取存储桶中存在的文件。
解决方案
改变如何s3fs
解决问题的方式。
我开始使用 apt-get:
RUN apt-get -y install s3fs
而不是 git 克隆:
RUN git clone https://github.com/s3fs-fuse/s3fs-fuse.git && \
cd s3fs-fuse && \
./autogen.sh && \
./configure && \
make && \
make install
推荐阅读
- docker - 如何修复使用代码 1 退出的 Docker-compose up 的错误
- python - matplotlib:如何自定义 x 轴刻度间隔
- r - Abline 不适合条形图
- delphi - 异步播放单独 MIDI 消息的最佳实践?
- c# - 如何将 .NET Core 3.1 API Web 应用程序托管为 Windows 服务?
- deno - 如何在 Deno 中获取命令的输出?
- kotlin - Kotlin Coroutines - 具有选择性消息消费的单生产者、多消费者
- angular - 在Angular中解析日期时间字符串
- javascript - setAttribute 并更改文本
- vb.net - 通过第二种形式 vb.net 编辑对象