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

Docker部署DynamoDB Local时本地创建表失败问题排查

排查Docker环境下Django应用连接本地DynamoDB的连接拒绝问题

核心问题分析

你在本地用aws cli能连localhost:8000的DynamoDB,但Docker里的Django应用用localhost就报错,本质是Docker容器的localhost和宿主的localhost不是同一个网络空间,容器里的localhost指向自身,而非宿主或其他容器。

具体排查步骤

  • 替换endpoint地址为Docker服务名
    在Docker Compose环境中,服务之间通过服务名(即docker-compose.yml里定义的服务名称,比如你的dynamodb-local)进行网络通信,把代码里的endpoint_url从http://localhost:8000改成http://dynamodb-local:8000。
    示例代码:

    import boto3
    dynamodb = boto3.resource(
        'dynamodb',
        endpoint_url='http://dynamodb-local:8000',
        region_name='us-east-1',
        aws_access_key_id='dummy',
        aws_secret_access_key='dummy'
    )
    
  • 验证DynamoDB服务的运行状态

    1. 用docker ps查看dynamodb-local容器是否正常启动,有没有退出或重启记录。
    2. 查看容器日志确认服务就绪:docker logs <dynamodb-local-container-id>,如果看到Initializing DynamoDB Local with...的日志,说明服务已启动。
    3. 检查端口映射:确保docker-compose.yml里dynamodb-local的端口配置是8000:8000,宿主端口和容器端口映射正确。
  • 确保服务启动顺序正确
    Docker Compose默认并行启动服务,可能Django启动时DynamoDB还没初始化完成。给Django服务添加依赖和健康检查,让它等DynamoDB就绪后再启动:

    services:
      django-app:
        build: ./backend
        depends_on:
          dynamodb-local:
            condition: service_healthy
        # 其他配置...
      dynamodb-local:
        image: amazon/dynamodb-local:latest
        ports:
          - "8000:8000"
        healthcheck:
          test: ["CMD-SHELL", "curl -f http://localhost:8000 || exit 1"]
          interval: 5s
          timeout: 5s
          retries: 5
    
  • 排查容器内网络连通性

    1. 进入Django容器:docker exec -it <django-app-container-id> /bin/bash
    2. 测试服务名解析:ping dynamodb-local,如果能ping通说明DNS没问题。
    3. 测试端口连通:telnet dynamodb-local 8000,如果连接成功,说明网络层面没问题;如果失败,检查两个服务是否在同一个Docker网络(默认Compose会创建专属网络,所有服务自动加入)。
  • 检查boto3配置的其他细节
    确保没有其他配置覆盖了endpoint_url,比如环境变量AWS_ENDPOINT_URL或者boto3的全局配置文件(~/.aws/config)。如果用环境变量传递endpoint,要保证变量值是http://dynamodb-local:8000而非localhost。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:14:55