Docker中Python Falcon应用连接本地DynamoDB失败求助
解决Docker中Falcon应用连接本地DynamoDB容器的连接拒绝问题
这个问题我之前踩过坑!核心原因是Docker容器里的127.0.0.1指向的是容器自身的网络空间,而不是运行DynamoDB的那个容器或者你的宿主机,所以才会出现连接拒绝的错误。另外我还注意到你的代码里有个小拼写问题,先一步步来解决:
1. 修正endpoint_url的拼写错误
你的代码里endpoint_url最后多了个URL编码的双引号%22,这会导致请求地址无效,先把它去掉:
dynamodb = boto3.client( 'dynamodb', aws_access_key_id="anything", aws_secret_access_key="anything", region_name="local", endpoint_url="http://127.0.0.1:8000/" # 去掉末尾的%22 )
2. 使用Docker自定义网络实现容器间通信
这是Docker容器间通信的标准做法,比用宿主机IP更可靠:
- 先创建一个自定义Docker网络:
docker network create local-dev-network - 启动DynamoDB容器时加入这个网络(注意容器名
dynamodb-local,后面要用到):docker run --name dynamodb-local --network local-dev-network -p 8000:8000 amazon/dynamodb-local -sharedDb - 启动你的Falcon应用容器时也加入同一个网络:
docker run --name falcon-app --network local-dev-network -p <你的应用端口>:<容器内端口> <你的应用镜像名> - 最后修改boto3的
endpoint_url,用DynamoDB容器的名字作为主机名(Docker自定义网络会自动解析容器名到对应的IP):dynamodb = boto3.client( 'dynamodb', aws_access_key_id="anything", aws_secret_access_key="anything", region_name="local", endpoint_url="http://dynamodb-local:8000/" )
3. 验证容器状态
如果还是有问题,先确认DynamoDB容器是否正常运行:
- 查看运行中的容器:
docker ps,确保dynamodb-local状态是Up - 查看DynamoDB容器日志:
docker logs dynamodb-local,确认有没有启动报错
内容的提问来源于stack exchange,提问作者Zekeriya Kosova
相关产品推荐
相关产品推荐

