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

在CodeBuild中连接dynamodb-local容器时遭遇ReadTimeout问题求助

解决CodeBuild中DynamoDB Local容器的ReadTimeout问题

以下是针对问题的具体排查和解决步骤:

1. 确认DynamoDB Local容器的端口监听与映射

  • 启动容器时,确保端口映射绑定到0.0.0.0(让主机可访问容器端口),正确启动命令:
    docker run -p 0.0.0.0:8000:8000 amazon/dynamodb-local
    
  • 更简单的方案是使用主机网络模式,跳过端口转发环节(适配CodeBuild环境特性):
    docker run --network host amazon/dynamodb-local
    

2. 调整AWS CLI的超时与代理设置

CodeBuild环境资源波动可能导致默认超时过短,执行CLI命令时显式增加超时:

aws dynamodb list-tables --endpoint-url http://localhost:8000 --cli-read-timeout 30 --cli-connect-timeout 30

同时检查是否存在代理环境变量干扰,临时取消代理:

unset HTTP_PROXY HTTPS_PROXY

3. 修正pytest中的boto3客户端配置

测试代码中必须明确设置端点URL、超时时间,DynamoDB Local无需真实密钥,使用dummy值即可:

import boto3
from botocore.config import Config

dynamodb_config = Config(
    connect_timeout=30,
    read_timeout=30,
)

dynamodb_client = boto3.client(
    'dynamodb',
    endpoint_url='http://localhost:8000',
    region_name='us-east-1',
    aws_access_key_id='dummy',
    aws_secret_access_key='dummy',
    config=dynamodb_config
)

4. 验证容器内部的端口监听状态

在CodeBuild构建步骤中执行以下命令,确认DynamoDB服务在容器内监听0.0.0.0:8000:

# 获取容器ID
CONTAINER_ID=$(docker ps -q --filter "name=dynamodb-local")
# 检查端口监听情况
docker exec $CONTAINER_ID netstat -tulpn | grep 8000

如果输出仅显示127.0.0.1:8000,需修改容器启动脚本,确保服务绑定到0.0.0.0(官方镜像默认已支持,自定义镜像需排查)。

5. 检查CodeBuild实例的本地防火墙规则

部分CodeBuild环境的iptables规则可能限制本地端口访问,可临时添加允许规则:

iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 8000 -j ACCEPT

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:02:01