首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >s3fs get文件抛出输入/输出错误或无法从远程文件"/mnt/s3/“读取:失败

s3fs get文件抛出输入/输出错误或无法从远程文件"/mnt/s3/“读取:失败
EN

Stack Overflow用户
提问于 2020-10-01 05:54:58
回答 1查看 1.1K关注 1票数 0

我尝试用s3fs设置sftp,但遇到访问文件的错误。

我在入口点安装sftp存储桶来创建S3镜像,我可以ssh\sftp到它的容器并查看S3存储桶中的文件和文件夹。但是我不能得到这个文件:

sftp:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
sftpusername@1234ebc1e2e3:~/s3$ cat pin
cat: pin: Input/output error

什么应该是一个理由?

下面是入口点:

代码语言:javascript
运行
复制
#!/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:

代码语言:javascript
运行
复制
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"]

构建镜像:

代码语言:javascript
运行
复制
docker build -t sftp/s3fs .

运行容器

代码语言:javascript
运行
复制
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检查)

代码语言:javascript
运行
复制
sftp -P 32775 sftpusername@localhost

在容器内部,我可以看到挂载了s3存储桶(目录和文件)的s3存储桶。我可以创建新的dir,删除创建的dir,但无法获取存储桶中存在的文件。

EN

回答 1

Stack Overflow用户

发布于 2020-10-01 18:10:54

改变获取s3fs的方式来解决这个问题。

我开始使用apt-get:

代码语言:javascript
运行
复制
RUN apt-get -y install s3fs

而不是git克隆:

代码语言:javascript
运行
复制
RUN git clone https://github.com/s3fs-fuse/s3fs-fuse.git && \
cd s3fs-fuse && \
./autogen.sh && \
./configure && \
make && \
make install
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64146285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档