【异常】Android中使用localhost:8080或者172.0.0.1:8080访问本地服务器org.apache.http.conn.HttpHostConnectException异常

本文详细解释了Android模拟器在连接服务器时遇到Connectionrefused异常的原因,并提供了将IP地址更改为实际IP的解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通常是org.apache.http.conn.HttpHostConnectException: Connection refused异常。一般由于服务器不响应导致!

主要原因是:

把IP地址写为localhost:8080或者172.0.0.1:8080。因为Android模拟器是一个独立的虚拟机,把IP写作localhost:8080或者172.0.0.1:8080都是把模拟器当作了服务器,而服务器运行在你的PC上,自然是响应不了的。

解决方法:

把IP地址改为你的实际IP就可以了。

在docker中启动superset,开启生成缩略图,容器中配置的redis也成功启动了,但是还是报错Traceback (most recent call last): superset_app | File "/app/.venv/lib/python3.11/site-packages/flask_appbuilder/api/__init__.py", line 111, in wraps superset_app | return f(self, *args, **kwargs) superset_app | ^^^^^^^^^^^^^^^^^^^^^^^^ superset_app | File "/app/superset/views/base_api.py", line 120, in wraps superset_app | duration, response = time_function(f, self, *args, **kwargs) superset_app | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ superset_app | File "/app/superset/utils/core.py", line 1363, in time_function superset_app | response = func(*args, **kwargs) superset_app | ^^^^^^^^^^^^^^^^^^^^^ superset_app | File "/app/superset/utils/log.py", line 303, in wrapper superset_app | value = f(*args, **kwargs) superset_app | ^^^^^^^^^^^^^^^^^^ superset_app | File "/app/superset/charts/api.py", line 750, in thumbnail superset_app | screenshot_obj.get_from_cache_key(cache_key) or ScreenshotCachePayload() superset_app | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ superset_app | File "/app/superset/utils/screenshots.py", line 206, in get_from_cache_key superset_app | if payload := cls.cache.get(cache_key): superset_app | ^^^^^^^^^^^^^^^^^^^^^^^^ superset_app | File "/app/.venv/lib/python3.11/site-packages/flask_caching/__init__.py", line 195, in get superset_app | return self.cache.get(*args, **kwargs) superset_app | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ superset_app | File "/app/.venv/lib/python3.11/site-packages/cachelib/redis.py", line 72, in get superset_app | return self.serializer.loads(self._read_client.get(self.key_prefix + key)) superset_app | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ superset_app | File "/app/.venv/lib/python3.11/site-packages/redis/commands/core.py", line 1816, in get superset_app | return self.execute_command("GET", name) superset_app | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ superset_app | File "/app/.venv/lib/python3.11/site-packages/redis/client.py", line 1266, in execute_command superset_app | conn = self.connection or pool.get_connection(command_name, **options) superset_app | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ superset_app | File "/app/.venv/lib/python3.11/site-packages/redis/connection.py", line 1461, in get_connection superset_app | connection.connect() superset_app | File "/app/.venv/lib/python3.11/site-packages/redis/connection.py", line 713, in connect superset_app | raise ConnectionError(self._error_message(e)) superset_app | redis.exceptions.ConnectionError: Error 111 connecting to localhost:6379. Connection refused. superset_app | 172.20.0.1 - - [26/Mar/2025:10:40:59 +0000] "GET /api/v1/chart/53/thumbnail/33abcd9ad6c3752ac558350cb4dfe056/ HTTP/1.1" 500 31 "http://127.0.0.1:8088/superset/welcome/" "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0" superset_app | 2025-03-26 10:40:59,222:ERROR:flask_appbuilder.api:Error 111 connecting to localhost:6379. Connection refused.
最新发布
03-27
<think>好的,我现在需要帮助用户解决在Docker中启动Superset时遇到的缩略图生成问题,尽管Redis已经启动,但依然报错连接被拒绝。首先,我需要仔细分析用户提供的错误日志。 错误信息显示,Superset在尝试连接到Redis时遇到了问题,具体是连接到localhost:6379被拒绝。这可能意味着虽然Redis容器已经运行,但Superset配置中的Redis连接地址不正确,或者网络配置有问题,导致无法正确访问Redis服务。 首先,用户提到在容器中配置了Redis并且成功启动,但可能Redis没有正确暴露端口,或者Superset容器无法通过localhost访问Redis。在Docker环境中,每个容器默认有自己的网络,因此如果Superset和Redis运行在同一个Docker网络中,需要使用容器名称作为主机名,而不是localhost。例如,如果Redis容器名为redis,那么连接地址应该是redis:6379,而不是localhost:6379。 接下来,我需要检查用户的Docker Compose文件配置是否正确。确保Redis服务已经正确定义,并且Superset服务依赖于Redis。此外,需要确认Superset的环境变量是否正确设置了Redis的URL,比如SUPERSET_CACHE_CONFIG中的CACHE_REDIS_URL应该指向Redis容器的地址。 另外,Redis容器是否配置了正确的端口映射?如果Redis只在容器内部监听6379端口,而宿主机没有映射端口,或者Superset容器没有连接到同一个Docker网络,也会导致连接失败。用户需要确保两个容器在同一个网络中,并且Superset使用Redis容器的服务名进行连接。 此外,可能还需要检查Redis的配置文件是否允许外部连接,比如bind 0.0.0.0,以及是否禁用了保护模式。如果Redis容器配置了密码,Superset的环境变量中也需要包含密码信息。 最后,建议用户验证Redis是否真的在运行,并且能够从Superset容器内部访问。可以通过进入Superset容器执行telnet或redis-cli命令测试连接性。如果连接失败,说明网络或配置有问题,需要调整Docker网络设置或Redis配置。 总结可能的问题点:Redis连接地址配置错误、Docker网络配置问题、Redis服务未正确启动或配置。需要逐一排查这些方面,确保所有配置正确,容器间网络互通。</think>在Docker中启动Superset时遇到Redis连接拒绝错误,需按以下步骤排查和解决: --- ### 一、核心问题诊断 错误日志显示关键信息: ```log redis.exceptions.ConnectionError: Error 111 connecting to localhost:6379. Connection refused. ``` 表明**Superset容器试图通过`localhost:6379`访问Redis失败**,常见原因: 1. Redis容器未正确暴露端口 2. 容器间网络未互通 3. Superset配置中Redis地址指向错误 --- ### 二、逐步解决方案 #### 1. 确保Docker网络配置正确 在`docker-compose.yml`中需满足: ```yaml services: superset_app: networks: - superset_network # 必须与redis共享网络 depends_on: - redis redis: image: redis:latest ports: - "6379:6379" # 确保端口映射 networks: - superset_network networks: superset_network: driver: bridge ``` * 如果未共享网络,容器间需通过容器名称(而非`localhost`)通信 --- #### 2. 修正Superset的Redis配置 在Superset的环境变量中配置: ```env # 使用Docker服务名作为Redis主机名 SUPERSET_CACHE_CONFIG='{"CACHE_TYPE":"RedisCache","CACHE_REDIS_URL":"redis://redis:6379/0"}' ``` * 若Redis有密码,需添加`?password=your_password` * 若使用独立Redis实例,替换`redis://`后的地址为实际IP/域名 --- #### 3. 验证Redis容器连通性 进入Superset容器执行测试: ```bash docker exec -it superset_app bash apt update && apt install -y telnet # 安装工具 telnet redis 6379 # 应返回"Connected to redis" ``` * 若连接失败,检查Redis容器日志:`docker logs redis` --- #### 4. 检查Redis配置 确保Redis容器启动时允许外部连接: ```bash # 在docker-compose.yml中为redis添加配置 command: redis-server --bind 0.0.0.0 --protected-mode no ``` * `--bind 0.0.0.0`允许所有IP连接 * `--protected-mode no`关闭保护模式 --- ### 三、完整配置示例 ```yaml version: '3' services: redis: image: redis:7.0 command: redis-server --bind 0.0.0.0 --protected-mode no ports: - "6379:6379" networks: - superset_net superset_app: image: apache/superset:latest environment: - SUPERSET_CACHE_CONFIG={"CACHE_TYPE":"RedisCache","CACHE_REDIS_URL":"redis://redis:6379/0"} ports: - "8088:8088" networks: - superset_net depends_on: - redis networks: superset_net: driver: bridge ``` --- ### 四、附加调试建议 1. 清除Superset缓存:重启后执行`docker-compose down -v` 2. 检查缩略图配置: ```env # 确保启用异步任务 SUPERSET_FEATURE_ALERT_REPORTS = True SUPERSET_ENABLE_THUMBNAILS = True ``` 3. 查看完整错误日志:`docker-compose logs --tail=100 superset_app redis` 通过以上步骤,95%的Redis连接问题可被解决。若仍有问题,需检查宿主机防火墙或云服务商的安全组设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值