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

Docker容器内无法连接宿主机MySQL的问题排查与解决

容器内连接宿主机MySQL失败的问题与解决

环境信息

  • Ubuntu: 20.04
  • Docker版本: 20.10
  • MySQL版本: 8.0
  • 容器环境:Python + mysql client
  • 宿主机:部署MySQL服务

宿主机MySQL配置

sudo apt install -y mysql-server
apt install -y default-libmysqlclient-dev

# 修改绑定地址:/etc/mysql/mysql.conf.d/mysqld.cnf 
# bind-address            = 0.0.0.0 

Docker容器构建配置

RUN apt-get update &&\
    apt install -y default-mysql-client &&\
    apt-get install -y gcc &&\
    apt-get install -y default-libmysqlclient-dev &&\
    /usr/local/bin/python -m pip install --upgrade pip &&\
    pip install --no-cache-dir SQLAlchemy

容器内Python连接代码

from sqlalchemy import create_engine
from sqlalchemy import text

SQLALCHEMY_DATABASE_URI = "mysql://root:pwd@localhost:3306/mysql?charset=utf8mb4"
engine = create_engine(SQLALCHEMY_DATABASE_URI, encoding='utf8', pool_pre_ping=True) # for mysql

with engine.connect() as connection:
    result = connection.execute(text("show tables;"))
    print(result.all())

问题现象

尝试通过SQLAlchemy和mysql-client连接宿主机MySQL均失败。

已尝试的方法

  • 修改MySQL绑定地址为0.0.0.0
  • 启动容器添加参数:--add-host host.docker.internal:host-gateway
  • 直接使用IP地址连接

多数方案称添加--add-host即可解决,但该方法无效。

更新进展

使用--network=host启动容器可成功连接,但不想采用该方式,希望通过host.docker.internal实现连接。

最终解决方案

启动容器时添加参数--add-host host.docker.internal:host-gateway,连接时指定主机为host.docker.internal(例如使用命令mysql -h host.docker.internal),同时将MySQL中root用户的host设置为%,允许非localhost连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:35:39