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

Docker本地部署DynamoDB后Java客户端连接被拒绝求助

解决本地DynamoDB与Java客户端连接拒绝问题

针对你遇到的Connection refused错误,我整理了几个排查和解决方向,你可以一步步尝试:

1. 修正Docker启动命令的参数错误

你当前的启动命令最后是-sharedD,这是拼写错误,正确的参数应该是-sharedDb(少了字母b)。参数错误可能导致DynamoDB容器无法正常启动或监听端口,重新执行正确的启动命令:

docker run -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb

执行后用docker ps确认容器处于Up状态。

2. 验证宿主机8000端口是否被占用

如果宿主机的8000端口已经被其他程序占用,DynamoDB容器无法成功绑定该端口,会直接导致连接失败:

  • Linux/macOS执行:
    lsof -i :8000
    
  • Windows执行:
    netstat -ano | findstr :8000
    

如果有其他进程占用,要么停止该进程,要么把DynamoDB映射到其他端口(比如-p 8001:8000),同时修改Java客户端的端点为http://localhost:8001/。

3. 确认容器内部端口监听状态

即使容器显示Up,也可能内部没有正确监听8000端口。先获取容器ID:

docker ps

然后执行命令查看容器内端口监听情况:

docker exec <你的容器ID> netstat -tulpn

如果看不到0.0.0.0:8000的监听记录,说明DynamoDB服务没正常启动,建议删除容器重新运行正确的启动命令。

4. 调整Java客户端的凭证配置(可选但推荐)

本地DynamoDB不需要真实的AWS凭证,你当前使用的EnvironmentVariableCredentialsProvider如果没有配置环境变量,可能会引入额外潜在问题。可以替换为匿名凭证简化配置:

AmazonDynamoDB client = AmazonDynamoDBClientBuilder
        .standard()
        .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials("dummy", "dummy")))
        .withEndpointConfiguration(
                new AwsClientBuilder.EndpointConfiguration("http://localhost:8000/", "eu-central-1")
        ).build();

这样可以排除凭证相关干扰,专注解决连接问题。

5. 检查网络环境(如果Java应用也在Docker容器中)

如果你的Java客户端运行在另一个Docker容器里,localhost指的是容器自身而非宿主机,这种情况下需要:

  • 把两个容器加入同一个Docker网络,然后用容器名称作为端点(比如http://dynamodb-local:8000/)
  • 或者使用宿主机的局域网IP地址(比如http://192.168.x.x:8000/,替换为你的实际IP)
  • Docker Desktop用户可以直接用http://host.docker.internal:8000/作为端点

建议先从第1和第2步开始排查,这两个是最常见的问题根源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:21:17