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

Docker Compose下Golang连接MariaDB失败:连接被拒绝求助

问题排查与解决方案

核心问题:容器网络访问错误

你的Golang服务尝试连接127.0.0.1:3306,但Docker Compose默认网络中每个容器都是独立节点,127.0.0.1指向容器自身而非MariaDB容器,必须通过服务名maria-db访问数据库容器。

具体修复步骤

1. 修正Golang数据库连接逻辑

  • 连接字符串需指定MariaDB服务名作为主机,同时明确TCP协议
  • 移除错误的defer db.Close():返回数据库实例后立即关闭会导致调用方拿到已失效的连接
func Connect() (*sql.DB, error) {
    // 替换为服务名maria-db作为主机地址
    db, err := sql.Open("mysql", "root:secret@tcp(maria-db:3306)/s_db")
    
    if err != nil {
        return nil, err
    }

    pingErr := db.Ping()
    if pingErr != nil {
        return nil, pingErr
    }
    return db, nil
}

2. 修复Docker Compose配置错误

(1)修正健康检查命令拼写

CMD-SHEL改为CMD-SHELL:

healthcheck:
  test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 --password=secret --silent"]

(2)修正expose字段用法

expose仅用于容器间端口暴露,只需指定端口号即可,若要对外暴露端口请使用ports字段:

expose:
  - "3306"
# 如需主机直接访问数据库,可添加(可选):
# ports:
#   - "3306:3306"

(3)(可选)添加服务启动依赖

确保API服务在数据库就绪后启动,避免时序问题:

services:
  api:
    # 你的API服务配置
    depends_on:
      maria-db:
        condition: service_healthy

验证方法

  1. 重启容器:docker-compose down && docker-compose up -d
  2. 查看API服务日志:docker-compose logs api,确认连接错误是否消失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:22:55