Docker容器外连接MariaDB报无法连接localhost MySQL服务器错误求助
问题排查与解决方法
你需要先确认Python代码的运行环境,两种场景的配置要求完全不同,对应修改如下即可:
场景1:代码运行在Docker宿主机本地(容器外部)
你的docker-compose中MariaDB的端口映射规则为127.0.0.1:3309:3306,即宿主机的3309端口才会转发到MariaDB容器内部的3306端口,你当前配置的端口错误,直接修改参数即可:
class DbSettings(BaseSettings): db_username:str = 'myuser' db_password: str = 'mypassword' db_host: str = 'localhost' db_port: int = 3309 # 替换为宿主机映射端口3309 db_name: str = 'mydatabase' # 其余配置保持不变
场景2:代码运行在fastapi-dev容器内部
两个服务同属fastapi_network自定义网络,Docker内置DNS会自动将服务名解析为对应容器的内网IP,不需要走宿主机端口映射,修改配置如下:
class DbSettings(BaseSettings): db_username:str = 'myuser' db_password: str = 'mypassword' db_host: str = 'mariadb' # 替换为docker-compose中定义的mariadb服务名 db_port: int = 3306 # 容器内网直接访问mariadb默认端口即可 db_name: str = 'mydatabase' # 其余配置保持不变
额外注意你原有代码的小问题:db_port: int = '3306'中类型标注为int,默认值却写了字符串,建议统一改为int类型避免隐性转换报错。
内容的提问来源于stack exchange,提问作者An Nguyen
相关产品推荐
相关产品推荐

