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

Docker Compose部署.NET+MySQL时无法连接MySQL主机问题排查

问题分析与解决方案

核心问题1:连接字符串的主机地址错误

你的API容器里的localhost指向的是容器自身,而非宿主机上的MySQL容器。在Docker Compose默认创建的内部网络中,服务名称可直接作为域名解析到对应容器的IP,因此连接字符串里的server需改为MySQL服务的名称db,而非localhost。

修改后的连接字符串:

"Release": "server=db; userid=root;pwd=12345;port=3306;database=lc_dbt"

核心问题2:depends_on的局限性

depends_on: - db仅能保证db容器先于lc_erp启动,但无法确保MySQL服务已完成初始化并处于可连接状态。若API容器启动时MySQL仍在初始化,就会出现连接失败的情况。

可通过添加健康检查解决该问题,让lc_erp容器等待MySQL服务就绪后再启动:

修改后的docker-compose.yaml:

version: '3.4'

services:
  db:
    image: mysql
    ports:
    - "3306:3306"
    environment:
       MYSQL_DATABASE: lc_dbt
       MYSQL_ROOT_PASSWORD: 12345
    volumes:
       - ./dbdata:/var/lib/mysql
       - ./_MySQL_Init_Script:/docker-entrypoint-initdb.d
    restart: always
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p12345"]
      interval: 5s
      timeout: 5s
      retries: 5

  lc_erp:
    depends_on:
       db:
         condition: service_healthy
    image: ${DOCKER_REGISTRY-}lcerp
    build:
      context: .
      dockerfile: LC_ERP/Dockerfile

额外说明

  • 健康检查通过mysqladmin ping命令验证MySQL服务是否就绪,每隔5秒检查一次,最多重试5次。
  • 修改连接字符串后,API容器可通过Docker内部网络访问MySQL容器,无需依赖宿主机的端口映射(端口映射可保留,方便外部工具连接)。

内容的提问来源于stack exchange,提问作者Åfsħąl Ãtħąr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:35:26