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

Docker Compose环境下Streamlit应用无法连接MariaDB问题

解决Streamlit应用无法连接Docker中MariaDB的问题

核心问题分析

报错显示连接localhost失败,但你配置的host是mariadb,说明存在网络隔离、环境变量未正确加载或连接参数缺失的问题,以下是针对性解决思路:

1. 让Streamlit应用容器与MariaDB处于同一网络

你的app服务未加入streamlit_network网络,导致两个容器不在同一网络域内,无法通过服务名mariadb访问。修改docker-compose.yml的app服务配置:

services: 
    app: 
        restart: always 
        build: ./app 
        ports: 
            - "8501:8501"
        command: streamlit run Main.py 
        networks:  # 新增网络配置
            - streamlit_network  

2. 修复环境变量的格式与加载配置

  • 修正.env文件格式:变量值不要加引号,否则读取到的内容会包含引号,导致解析错误:
    # Environment variables defined inside a .env file 
    host=mariadb
    user=testing
    password=passtest
    database=testtest
    port=3306  # 容器内MariaDB默认端口为3306,与宿主机映射端口无关
    
  • 在docker-compose中加载.env:给app服务添加env_file配置,确保环境变量传入容器(路径根据实际存放位置调整):
    app: 
        restart: always 
        build: ./app 
        ports: 
            - "8501:8501"
        command: streamlit run Main.py 
        env_file: ./app/.env  # 加载.env文件
        networks: 
            - streamlit_network 
    

3. 完善数据库连接代码

你的连接代码未传入port参数,需补充对应配置:

conn = pymysql.connect(
        host=os.environ.get("host"),
        user=os.environ.get("user"),
        password=os.environ.get("password"),
        database=os.environ.get("database"),
        port=int(os.environ.get("port")),  # 新增端口参数
        cursorclass=pymysql.cursors.DictCursor
)

4. 修正MariaDB的端口映射配置

MariaDB默认监听容器内的3306端口,你当前的端口映射xxx.xx.xx.xx:3307:3307错误,应改为宿主机端口映射到容器内的3306:

mariadb: 
    image: mariadb:10.5.17 
    ports: 
        - "xxx.xx.xx.xx:3307:3306"  # 修正容器内端口为3306
    volumes: 
    - db_data:/var/lib/mysql 
    - db_conf:/etc/mysql/conf.d 
    environment: 
        MARIADB_ROOT_PASSWORD: test
        MARIADB_DATABASE: testtest 
        MARIADB_USER: testing
        MARIADB_PASSWORD: passtest
    networks: 
        - streamlit_network  

5. 验证网络连通性(可选)

如果仍有问题,可进入app容器内测试与mariadb的连通性:

# 进入app容器
docker exec -it <app容器名称> bash
# 安装ping工具(容器未预装时)
apt update && apt install iputils-ping
# 测试服务名解析
ping mariadb

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:25:39