FROM alpine AS final LABEL author="Chris Lu" COPY ./weed /usr/bin/weed RUN chmod +x /usr/bin/weed && ls -la /usr/bin/weed RUN mkdir -p /etc/seaweedfs COPY ./filer.toml /etc/seaweedfs/filer.toml COPY ./entrypoint.sh /entrypoint.sh # Install dependencies and create non-root user RUN apk upgrade --no-cache && \ apk add --no-cache fuse curl su-exec && \ addgroup -g 1000 seaweed && \ adduser -D -u 1000 -G seaweed seaweed # volume server grpc port EXPOSE 18080 # volume server http port EXPOSE 8080 # filer server grpc port EXPOSE 18888 # filer server http port EXPOSE 8888 # master server shared grpc port EXPOSE 19333 # master server shared http port EXPOSE 9333 # s3 server http port EXPOSE 8333 # webdav server http port EXPOSE 7333 # Create data directory and set proper ownership for seaweed user RUN mkdir -p /data/filerldb2 && \ chown -R seaweed:seaweed /data && \ chown -R seaweed:seaweed /etc/seaweedfs && \ chmod 755 /entrypoint.sh VOLUME /data WORKDIR /data # Entrypoint will handle permission fixes and user switching ENTRYPOINT ["/entrypoint.sh"] # Default to a complete single-process cluster (master+volume+filer+S3+admin) # so the image is usable out of the box — including in environments like # GitHub Actions service containers that cannot pass arguments to the entrypoint. # Override with any other subcommand at `docker run` / compose time. CMD ["mini", "-dir=/data"]