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

Docker部署MySQL无法通过C++ Poco连接,求解决方案

问题:MacOS 12.6连接Docker容器内MySQL失败

我在MacOS 12.6系统中,尝试连接Docker容器内的MySQL数据库,但多次尝试均失败!

注: 已试过相似问题的方案,无效。

以下是我的C++连接代码:

#include <iostream>
#include <string>

#include <Poco/Data/MySQL/MySQLException.h>
#include <Poco/Data/MySQL/Connector.h>
#include <Poco/Data/SessionFactory.h>

using namespace std;

int main()
{
    Poco::Data::MySQL::Connector::registerConnector();
    try
    {
        string str = "host=0.0.0.0;port=3306;user=admin;db=myServiceDb;password=password;compress=true;auto-reconnect=true";
        Poco::Data::Session test(Poco::Data::SessionFactory::instance().create(Poco::Data::MySQL::Connector::KEY, str));
    }
    catch (Poco::Data::ConnectionFailedException &e)
    {
        cout << e.what() << endl;
        return -1;
    }

    return 0;
}

以下是Docker Compose配置:

services:
  myServiceDb:
    image: mysql:latest
    restart: always
    environment:
      MYSQL_DATABASE: ' myServiceDb'
      MYSQL_USER: 'admin'
      MYSQL_PASSWORD: 'password'
      MYSQL_ROOT_PASSWORD: 'rootpassword'
    ports:
      - '3306:3306'
    expose:
      - '3306'

我已尝试将host改为localhost、0.0.0.0、127.0.0.1,也试过用Python连接,均失败。但奇怪的是,使用相同凭据通过MySQLWorkbench可以正常连接,我认为问题出在MySQL本身。请问需要修改什么才能成功连接?


解决方案
  • 修正数据库名称的空格问题
    你的Docker Compose里MYSQL_DATABASE: ' myServiceDb'的值前多了一个空格,实际创建的数据库是 myServiceDb(带前导空格),但代码里指定的是无空格的myServiceDb,导致数据库匹配失败。修改Docker Compose的环境变量:

    MYSQL_DATABASE: 'myServiceDb'
    
  • 调整用户访问权限
    MySQL默认创建的用户可能仅允许localhost连接,虽然Workbench能连,但程序连接会受权限限制。进入容器执行以下命令,给admin用户开放所有主机的访问权限:

    # 进入MySQL容器
    docker exec -it [容器ID/名称] mysql -uroot -prootpassword
    
    # 授予权限并刷新
    GRANT ALL PRIVILEGES ON myServiceDb.* TO 'admin'@'%' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;
    
  • 替换连接字符串的主机地址
    在MacOS上访问Docker容器内的服务,建议使用Docker提供的专用域名host.docker.internal,替换代码中的0.0.0.0:

    string str = "host=host.docker.internal;port=3306;user=admin;db=myServiceDb;password=password;compress=true;auto-reconnect=true";
    
  • 重启容器生效配置
    执行命令重启容器,确保所有修改生效:

    docker-compose down && docker-compose up -d
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:15:46