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

本地Docker运行DynamoDB:内外连接看到不同数据表的问题

问题解答

本地版DynamoDB不会根据连接来源的URL创建独立环境,你遇到的数据隔离问题,核心原因有两个:

1. 连接的是两个完全独立的DynamoDB实例

你本地终端用http://localhost:8000访问的是通过docker run -p 8000:8000 amazon/dynamodb-local启动的Docker容器内的DynamoDB;而Docker内部程序用http://docker.for.mac.localhost:8000访问的是你的Mac主机本身运行的DynamoDB实例(大概率是你之前直接在Mac本地启动的,比如用官方jar包运行)。这两个实例完全独立,数据自然不互通。

2. 未启用共享数据库模式(默认行为导致客户端隔离)

即使连接的是同一个DynamoDB实例,默认情况下本地DynamoDB会为每个不同的客户端(基于访问时的标识信息,比如AWS_ACCESS_KEY_ID)生成单独的数据库文件,这也会造成不同客户端看到的数据不一致。


解决方案

方案一:统一连接到同一个Docker内的DynamoDB实例

推荐使用Docker网络实现容器间通信,避免依赖主机端口映射:

  1. 创建专属Docker网络:
    docker network create dynamodb-net
    
  2. 启动DynamoDB容器时加入该网络,并启用共享数据库:
    docker run -d --name dynamodb-local --network dynamodb-net -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb
    
  3. 本地终端连接时用localhost:8000:
    aws dynamodb --endpoint-url http://localhost:8000 list-tables
    
  4. Docker内的程序连接时用容器名作为地址:
    http://dynamodb-local:8000
    

方案二:持久化数据并确保单实例访问

如果需要数据不随容器重启丢失,启动时挂载本地目录作为数据卷,并强制共享数据库:

docker run -d --name dynamodb-local -p 8000:8000 -v /your/local/data/path:/home/dynamodblocal/data amazon/dynamodb-local -jar DynamoDBLocal.jar -dbPath /home/dynamodblocal/data -sharedDb

将/your/local/data/path替换为你本地的实际目录,这样所有连接都会读写同一个持久化的数据库文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 05:22:44