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

Docker部署本地DynamoDB后连接超时的解决方法

解决DynamoDB Local容器超时问题

问题场景

通过以下Docker Compose文件创建了名为dynamodb的容器:

version: '3.8'
services:
  dynamodb-local:
    command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data"
    image: "amazon/dynamodb-local:latest"
    container_name: dynamodb
    ports:
      - "8000:8000"
    volumes:
      - "./data/dynamodb:/home/dynamodblocal/data"
    working_dir: /home/dynamodblocal
  dynamodb-init:
    depends_on:
      - dynamodb-local
    image: amazon/aws-cli
    environment:
      AWS_ACCESS_KEY_ID: dummy-key-id
      AWS_SECRET_ACCESS_KEY: dummy-key
    command: >-
      dynamodb create-table
        --table-name Foo
        --attribute-definitions
            AttributeName=id,AttributeType=S
        --key-schema
            AttributeName=id,KeyType=HASH
        --billing-mode PAY_PER_REQUEST
        --endpoint-url http://dynamodb-local:8000 --region dummy-region

执行docker compose up -d后,容器显示正常运行:

CONTAINER ID   IMAGE                          COMMAND                  CREATED          STATUS          PORTS                                       NAMES
7f8b152c7ea8   amazon/dynamodb-local:latest   "java -jar DynamoDBL…"   14 seconds ago   Up 11 seconds   0.0.0.0:8000->8000/tcp, :::8000->8000/tcp   dynamodb

但执行以下AWS CLI命令时出现超时:

aws dynamodb list-tables --endpoint http://localhost:8000 --profile akhakpouri

错误信息:Read timeout on endpoint URL: "http://localhost:8000/"

解决方案

  • 检查本地端口8000是否被占用
    用命令查看端口占用情况:

    # Linux/macOS
    lsof -i :8000
    # Windows
    netstat -ano | findstr :8000
    

    如果有其他进程占用8000端口,要么停止该进程,要么修改Compose文件中的端口映射(比如改成8001:8000),然后重启容器。

  • 验证AWS CLI配置的凭证是否匹配
    你的akhakpouri配置文件中,AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY需要和Compose中初始化容器用的dummy-key-id、dummy-key一致,或者直接在命令中指定凭证:

    aws dynamodb list-tables --endpoint http://localhost:8000 --region dummy-region --access-key dummy-key-id --secret-key dummy-key
    

    也可以临时设置环境变量:

    export AWS_ACCESS_KEY_ID=dummy-key-id
    export AWS_SECRET_ACCESS_KEY=dummy-key
    aws dynamodb list-tables --endpoint http://localhost:8000 --region dummy-region
    
  • 确认DynamoDB容器是否真正就绪
    depends_on只保证容器启动顺序,不确保服务完全就绪。可以手动进入容器测试服务是否正常:

    docker exec -it dynamodb curl http://localhost:8000
    

    如果返回DynamoDB Local相关页面,说明服务正常;如果没响应,可能是容器内服务启动失败,查看容器日志:

    docker logs dynamodb
    

    根据日志排查问题,比如数据卷权限问题,确保本地./data/dynamodb目录有读写权限。

  • 检查网络连通性
    尝试用curl直接访问本地端口:

    curl http://localhost:8000
    

    如果curl也超时,说明端口映射可能有问题,检查Docker是否有权限绑定端口,或者重启Docker服务后重新启动容器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:05:01