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

Docker Compose部署DynamoDB Local遇表不存在错误求助

问题:DynamoDB Local 启动应用时提示表不存在错误

Docker Compose 配置

volumes:
  dynamo-db:
    driver: local

services:
  dynamodb-local:
    container_name: local-db
    image: amazon/dynamodb-local
    restart: always
    command: -jar DynamoDBLocal.jar -sharedDb -dbPath /home/dynamodblocal/
    volumes:
      - dynamo-db:/home/dynamodblocal
    ports:
      - '8000:8000'
    env_file:
      - ...

错误日志

ResourceNotFoundException: Cannot do operations on a non-existent table
2023-02-06T23:13:33.829569752Z         at Request.extractError (/srv/node_modules/aws-sdk/lib/protocol/json.js:52:27)
2023-02-06T23:13:33.829573169Z         at Request.callListeners (/srv/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
2023-02-06T23:13:33.829576085Z         at Request.emit (/srv/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
2023-02-06T23:13:33.829578835Z         at Request.emit (/srv/node_modules/aws-sdk/lib/request.js:686:14)
2023-02-06T23:13:33.829581502Z         at Request.transition (/srv/node_modules/aws-sdk/lib/request.js:22:10)
2023-02-06T23:13:33.829584252Z         at AcceptorStateMachine.runTo (/srv/node_modules/aws-sdk/lib/state_machine.js:14:12)
2023-02-06T23:13:33.829587169Z         at /srv/node_modules/aws-sdk/lib/state_machine.js:26:10
2023-02-06T23:13:33.829601794Z         at Request.<anonymous> (/srv/node_modules/aws-sdk/lib/request.js:38:9)
2023-02-06T23:13:33.829605460Z         at Request.<anonymous> (/srv/node_modules/aws-sdk/lib/request.js:688:12)
2023-02-06T23:13:33.829608252Z         at Request.callListeners (/srv/node_modules/aws-sdk/lib/sequential_executor.js:116:18)
2023-02-06T23:13:33.829610960Z message: Cannot do operations on a non-existent table
2023-02-06T23:13:33.829613585Z code: ResourceNotFoundException
2023-02-06T23:13:33.829616169Z requestId: 40aaa8a1-575f-45be-b8b1-e64fb28c9cb4
2023-02-06T23:13:33.829618710Z statusCode: 400

已排查情况

  • 已在Docker Compose中配置-sharedDb参数并指定数据存储路径
  • 应用仅修改了DynamoDB的URL,其他配置在生产/测试环境可正常运行
  • 使用技术栈:Node.js 16 + Dynamoose

解决建议

1. 确认本地实例中是否存在目标表

通过aws-cli连接本地DynamoDB,列出所有表:

aws dynamodb list-tables --endpoint-url http://localhost:8000

若未查询到目标表,需手动创建或检查应用的表初始化逻辑是否正常执行。

2. 验证Dynamoose的本地实例配置

确保Dynamoose明确指向本地端点,且配置了本地所需的占位凭证:

const dynamoose = require('dynamoose');
// 本地DynamoDB无需真实凭证,配置占位值即可
dynamoose.aws.sdk.config.update({
  accessKeyId: 'dummy-key',
  secretAccessKey: 'dummy-secret',
  region: 'us-east-1'
});
// 指定本地DynamoDB端点
dynamoose.aws.ddb.local('http://localhost:8000');

3. 检查数据卷的挂载与权限

  • 验证容器内数据目录的权限与内容:
docker exec local-db ls -l /home/dynamodblocal/
  • 若权限异常或旧数据卷存在脏数据,可删除旧卷后重新启动:
docker-compose down -v
docker-compose up -d

4. 确认应用表初始化时机

若依赖Dynamoose自动创建表,需确保模型配置中开启自动创建与等待表就绪:

const UserSchema = new dynamoose.Schema({ /* 表结构定义 */ });
const UserModel = dynamoose.model('User', UserSchema, {
  create: true, // 开启自动创建表
  waitForActive: true // 等待表创建完成再执行后续操作
});

5. 验证-sharedDb参数是否生效

进入容器检查进程启动命令,确认-sharedDb参数已正确加载:

docker exec local-db ps aux

若参数未出现在进程命令中,需检查Docker Compose的command格式是否正确(注意参数顺序与空格)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:20:54