我可以将docker卷与S3FS一起使用吗



我希望在容器之间有一个共享目录:ftps3fs。到目前为止,我已经在docker compose文件中创建了一个名为s3的卷。

如果我停止s3fss3fs容器中运行,那么我可以在ftp容器中创建文件,它们将显示在/home/files下的s3fs侧。

但是,当运行s3fs时,目录/home/files保持为空,而我在ftp中创建文件。

这就是我的/proc/mounts文件的样子:

/dev/sda2 /home/files ext4 rw,relatime,data=ordered 0 0
s3fs /home/files fuse.s3fs rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other 0 0

我相信fuse可能会覆盖我的docker卷,以前有人遇到过这个问题吗?

docker-compose.yml

version: "3"
services:
ftp:
image: app/proftpd:latest
volumes:
- s3:/home/files
ports:
- 2222:2222
s3fs:
image: app/s3fs:latest
command: start
env_file:
- s3fs/aws.env
volumes:
- s3:/home/files
cap_add:
- SYS_ADMIN
devices:
- "/dev/fuse"
environment:
ENVIRONMENT: "dev"
volumes:
s3:

s3fs-Dockerfile

FROM ubuntu:16.04
RUN apt-get update -qq
RUN apt-get install -y 
software-properties-common
RUN apt-get update -qq
RUN apt-get install -y 
automake 
autotools-dev 
fuse 
g++ 
git 
libcurl4-openssl-dev 
libfuse-dev 
libssl-dev 
libxml2-dev 
make 
pkg-config 
curl
RUN curl -L https://github.com/s3fs-fuse/s3fs-fuse/archive/v1.84.tar.gz | tar zxv -C /usr/src
RUN cd /usr/src/s3fs-fuse-1.84 && ./autogen.sh && ./configure --prefix=/usr --with-openssl && make && make install
COPY entrypoint.sh /opt/s3fs/bin/entrypoint.sh
RUN mkdir -p /home/files
WORKDIR /opt/s3fs/bin
ENTRYPOINT ["/bin/sh", "./entrypoint.sh"]

s3fs-入口点.sh

#!/usr/bin/env bash
case $1 in
start)
echo "Starting S3Fs: "
s3fs mybucket /home/files -o allow_other,nonempty -d -d
;;
esac

ftp-Dockerfile

FROM ubuntu:16.04
RUN apt-get update && apt-get install -y 
openssh-server 
proftpd-basic 
proftpd-mod-mysql
COPY proftpd.conf /etc/proftpd/proftpd.conf
COPY sftp.conf /etc/proftpd/conf.d/sftp.conf
COPY setup.sh /etc/proftpd/setup.sh
RUN chmod 500 /etc/proftpd/setup.sh && /etc/proftpd/setup.sh
EXPOSE 2222
ENTRYPOINT ["/bin/sh", "/etc/proftpd/entrypoint.sh"]

您可以通过下一种方式在docker容器中装载s3

1.添加到Dockerfile

RUN apt-get install -y fuse s3fs
RUN mkdir /root/.aws
RUN touch /root/.aws/.passwd-s3fs && chmod 600 /root/.aws/.passwd-s3fs
COPY entrypoint.sh ./
RUN chmod 700 entrypoint.sh
ENTRYPOINT entrypoint.sh

2.使用下一个脚本创建entrypoint.sh

#!/bin/sh
echo "$AWS_CREDS" > /root/.aws/.passwd-s3fs
echo "$BUCKET_NAME /srv/files fuse.s3fs _netdev,allow_other,passwd_file=/root/.aws/.passwd-s3fs 0 0" > /etc/fstab
mount -a
<your old CMD or ENTRYPOINT>

3.在docker-compose.yml中添加下一个

<your-container-name>:
image: ...
build: ...
environment:
- AWS_ID="AKI..."
- AWS_KEY="omIE..."
- AWS_CREDS=AKI...:2uMZ...
- BUCKET_NAME=<YOUR backed name>
devices:
- "/dev/fuse"
cap_add:
- SYS_ADMIN
security_opt:
- seccomp:unconfined

相关内容

  • 没有找到相关文章

最新更新