Flask容器通过环境变量访问本地SQS容器时endpoint无效报错
解决本地SQS模拟服务的端点无效问题
你遇到的核心问题是协议不匹配——本地的SQS模拟镜像(基于docker-SQS-local)默认只提供HTTP服务,而你配置的端点用了HTTPS,这直接触发了ValueError: Invalid endpoint错误。下面是具体的修复步骤:
1. 修正端点协议(关键操作)
打开你的local_secrets.env文件,把所有以https://开头的URL替换为http://:
QUEUE_ENDPOINT=http://sqs_service:9324 FEEDER_QUEUE_URL=http://sqs_service:9324/queue/feeder PREDICTION_QUEUE_URL=http://sqs_service:9324/queue/prediction AWS_ACCESS_KEY_ID='' AWS_SECRET_ACCESS_KEY=''
本地SQS模拟服务没有配置SSL证书,HTTPS请求会被直接拒绝,改用HTTP就能正常建立通信。
2. 优化Boto3客户端配置
确保你的Boto3客户端代码正确读取修正后的环境变量,同时可以补充显式配置避免潜在问题:
import boto3 import os sqs_client = boto3.client( 'sqs', endpoint_url=os.getenv("QUEUE_ENDPOINT"), region_name='us-east-1', # 可替换为任意真实AWS区域,部分Boto3版本不支持'default'区域 aws_access_key_id=os.getenv("AWS_ACCESS_KEY_ID"), aws_secret_access_key=os.getenv("AWS_SECRET_ACCESS_KEY"), use_ssl=False # 强制禁用SSL,和端点协议保持一致 )
添加use_ssl=False可以避免Boto3自动尝试切换到HTTPS连接。
3. 重启Docker服务使配置生效
修改环境变量后,需要重启docker-compose服务让新配置加载:
docker-compose down docker-compose up --build
额外验证步骤
- 查看SQS服务日志:执行
docker logs sqs_container,确认feeder和prediction队列已成功创建。 - 测试网络连通性:进入app_service容器内执行
curl http://sqs_service:9324,如果返回SQS模拟服务的页面,说明容器间网络通信正常。
按照以上步骤调整后,应该就能正常访问本地SQS服务并发送消息了。
内容的提问来源于stack exchange,提问作者Underoos
相关产品推荐
相关产品推荐

