如何让本地 dynamodb 运行以便我的 java 应用程序可以连接它?

Dan*_*Dan 1 java amazon-dynamodb docker

我查看了几个 stackoverflow 帖子以及 dynamodb 的 AWS 文档来回答这个问题。我希望能够在 docker 中运行本地 dynamodb,然后从我本地运行的 java 应用程序连接到它。我已经安装了 amazon/dynamodb-local 映像并使其正常工作。我什至使用 aws cli 在这个本地运行的 dynamodb 上创建表、列出表、删除表等。我在 java 项目中安装了 dynamodb sdk 依赖项,我觉得我已经把所有东西都连接起来了,运行了一个集成测试,然后我收到了这个错误消息

com.amazonaws.services.dynamodbv2.model.ResourceNotFoundException:无法对不存在的表进行操作(服务:AmazonDynamoDBv2;状态代码:400;错误代码:ResourceNotFoundException;请求 ID:c915ea26-008e-4a9f-8b99-6df5d6aa7c)

当使用 aws cli 运行 list-tables 函数时,该表确实存在,所以我用谷歌搜索,然后检查了文档dynamodb 文档,似乎您必须使用标志启动本地 dynamodb

-sharedDb

我通过尝试使用此命令启动本地运行的 dynamodb 来尝试此操作

docker run -p 8000:8000 amazon/dynamodb-local -sharedDb
Run Code Online (Sandbox Code Playgroud)

虽然我得到了错误

无法识别的选项:-sharedDb 错误:无法创建 Java 虚拟机。错误:发生了致命异常。程序将会退出。

在此之后我尝试使用谷歌搜索或寻找有类似问题的人。但我什么也没找到。如何启动本地运行的 dynamodb 并从本地运行的 Java 应用程序连接到它?

Mos*_*ein 5

你需要像这样写命令

docker run -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb
Run Code Online (Sandbox Code Playgroud)

不要忘记,您可能需要挂载一个卷以将数据保留在主机上,因为如果您删除了容器,则使用上述命令不会保存数据,为此您需要使用-v标志

docker run -p 8000:8000 -v /path/to/data/locally:/data/ amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb -dbPath /data
Run Code Online (Sandbox Code Playgroud)

有关您可以使用的更多选项(注意--rm标志)

docker run --rm -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -help
Run Code Online (Sandbox Code Playgroud)