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

Flutter聊天应用连接Docker部署的RethinkDB时出现连接拒绝错误

Flutter应用连接Docker部署的RethinkDB失败:连接被拒绝

问题详情

将Flutter聊天应用连接Docker部署的RethinkDB服务器时,抛出异常:

Unhandled Exception: Could not connect to 127.0.0.1:28015. Error SocketException: Connection refused (OS Error: Connection refused, errno = 111)

已确认RethinkDB容器处于运行状态,将连接地址从127.0.0.1更换为本机IP后问题仍未解决。

相关代码

CompositionRoot.dart

import 'package:chat/chat.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_newapp/src/blocs/onBoarding/onboarding_cubit.dart';
import 'package:flutter_newapp/src/blocs/onBoarding/prfil_image_cubit.dart';
import 'package:flutter_newapp/src/data/Services/image_uploader.dart';
import 'package:flutter_newapp/src/data/Services/local_cache.dart';
import 'package:flutter_newapp/src/presentation/screen/onBoarding/onboarding.dart';
import 'package:rethink_db_ns/rethink_db_ns.dart';
import 'package:shared_preferences/shared_preferences.dart';

class CompositionRoot {
  static late SharedPreferences _sharedPreferences;
  static late RethinkDb _r;
  static late Connection _connection;
  static late IUserService _userService;
  static late ILocalCache _localCache;
  static late ImageUploader imageUploader;

  static configure() async {
    _r = RethinkDb();
    _connection = await _r.connect(host: "127.0.0.1", port: 28015);
    _userService = UserService(_r, _connection);
    _localCache = LocalCache(_sharedPreferences);
  }

  static Widget composeOnboardingUi() {

    ImageUploader imageUploader = ImageUploader('http://localhost:3000/upload');
    OnBoardingCubit onboardingCubit =
        OnBoardingCubit(_userService, _localCache, imageUploader);

    return MultiBlocProvider(providers:[
      BlocProvider(create: (BuildContext context) => onboardingCubit ),
      BlocProvider(create: (BuildContext context) => ProfileImageCubit() )
    ], child: OnBoardingScreen());
  }
}

main.dart

import 'package:flutter/material.dart';
import 'package:flutter_newapp/core/app_theme.dart';
import 'package:flutter_newapp/src/presentation/screen/onBoarding/onboarding.dart';

import 'composition_root.dart';

void main() async {
 WidgetsFlutterBinding.ensureInitialized();
 await CompositionRoot.configure();
 runApp(const MyApp());
}

class MyApp extends StatelessWidget {
 const MyApp({super.key});

 // This widget is the root of your application.
 @override
 Widget build(BuildContext context) {
   return MaterialApp(
     title: 'Chat App',
     debugShowCheckedModeBanner: false,
     theme: lightTheme(context),
     darkTheme: darkTheme(context),
     home: CompositionRoot.composeOnboardingUi(),
   );
 }
}

解决方案

1. 验证Docker端口映射

运行docker ps检查RethinkDB容器的端口映射,确认存在0.0.0.0:28015->28015/tcp的映射。如果没有,重新启动容器时添加端口映射参数:

docker run -p 28015:28015 rethinkdb

2. 修改RethinkDB绑定地址

默认RethinkDB仅绑定容器内的127.0.0.1,外部无法访问。启动容器时指定绑定所有地址:

docker run -p 28015:28015 rethinkdb rethinkdb --bind all

3. 调整Flutter连接地址

  • 真机测试:使用主机的局域网IP(如192.168.x.x),确保手机和主机在同一局域网。
  • Android模拟器:用10.0.2.2映射主机的127.0.0.1。
  • iOS模拟器:可直接使用localhost或主机IP。

修改CompositionRoot.dart中的连接代码:

_connection = await _r.connect(host: "你的目标地址", port: 28015);

4. 排查防火墙限制

确认主机防火墙未拦截28015端口:

  • Linux:执行sudo ufw allow 28015
  • Windows:在防火墙高级设置中添加入站规则允许28015端口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:36:59