You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Docker使模拟S3存储的数据在系统重启后持久化?

解决LocalStack S3数据持久化问题及替代方案

一、修改LocalStack配置实现持久化

你的配置已设置DATA_DIR=/tmp/localstack/data,但未将该容器内目录挂载到宿主机,导致容器销毁后数据丢失。只需补充卷挂载并开启持久化模式即可解决:

修改后的docker-compose.yml

version: '3.8'
services:
  localstack: 
    image: localstack/localstack:latest
    environment: 
      - DEFAULT_REGION=ap-northeast-1
      - EDGE_PORT=4566
      - SERVICES=s3,logs
      - AWS_DEFAULT_REGION=us-west-1
      - AWS_ACCESS_KEY_ID=xxx
      - AWS_SECRET_ACCESS_KEY=xxx
      - DOCKER_HOST=unix:///var/run/docker.sock
      - DATA_DIR=/tmp/localstack/data
      - PERSISTENCE=1  # 开启持久化,LocalStack会将状态保存到DATA_DIR
    ports: 
      - '4566-4583:4566-4583'
    volumes:
      - ./make_bucket.sh:/docker-entrypoint-initaws.d/make_bucket.sh
      - localstack_data:/tmp/localstack/data  # 挂载本地卷到容器数据目录

# 定义Docker管理的本地卷,自动处理宿主机存储路径
volumes:
  localstack_data:

优化初始化脚本

持久化后重启容器时,原脚本会因存储桶已存在报错,修改make_bucket.sh增加存在性判断:

#!/bin/bash
aws --endpoint-url=http://localhost:4566 s3api head-bucket --bucket my-bucket || aws --endpoint-url=http://localhost:4566 s3 mb s3://my-bucket

二、替代方案:使用MinIO(原生兼容S3,持久化更简洁)

MinIO是轻量高性能的对象存储服务,完全兼容S3 API,原生支持数据持久化,配置更直观:

MinIO的docker-compose.yml配置

version: '3.8'
services:
  minio:
    image: minio/minio:latest
    command: server /data --console-address ":9001"
    environment:
      - MINIO_ROOT_USER=admin
      - MINIO_ROOT_PASSWORD=password123
    ports:
      - "9000:9000"  # S3标准API端口
      - "9001:9001"  # Web控制台端口
    volumes:
      - minio_data:/data  # 挂载数据卷,持久化存储所有对象

volumes:
  minio_data:

使用说明

  1. 启动后访问http://localhost:9001,用配置的账号密码登录控制台,手动创建my-bucket
  2. 使用AWS CLI访问时,指定endpoint为http://localhost:9000,密钥使用MINIO_ROOT_USER和MINIO_ROOT_PASSWORD

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 13:41:01