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

如何从同一宿主机的另一个Docker实例连接到MySQL Docker实例

稳定连接解决方案

最优方案:使用Docker内置DNS解析(同一自定义网络下)

你创建的mynetwork属于Docker自定义桥接网络,这类网络默认自带DNS服务,同网络下的容器可以直接使用容器名作为hostname互相访问,完全不需要关心容器动态变化的IP地址。
你只需要修改Python代码中的数据库连接host配置即可:

# 将原host值127.0.0.1替换为MySQL容器的名称mysql
host="mysql"

原问题原因说明

  • 本地直接运行Python脚本时,127.0.0.1指向宿主机,你启动MySQL容器时做了3306:3306的端口映射,所以可以正常连接
  • Python容器内部的127.0.0.1指向容器自身,自身没有运行MySQL服务,因此会报连接失败错误

多环境兼容方案:将连接配置抽离为环境变量

如果需要同时支持本地开发调试、容器部署两种场景,不需要反复修改代码,只需要将数据库连接参数配置为从环境变量读取即可:

  1. 在.env文件中新增配置项:
# 本地开发时用127.0.0.1,容器部署时改为mysql即可
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=5895
MYSQL_DATABASE=你的库名
  1. Python代码中从环境变量读取配置:
import os
import mysql.connector

host = os.getenv("MYSQL_HOST")
port = int(os.getenv("MYSQL_PORT"))
user = os.getenv("MYSQL_USER")
password = os.getenv("MYSQL_PASSWORD")
database = os.getenv("MYSQL_DATABASE")

conn = mysql.connector.connect(
    host=host,
    port=port,
    user=user,
    password=password,
    database=database
)
  1. 容器启动时也可以直接通过参数覆盖环境变量,不需要修改镜像内的配置:
docker run -itd -p 3000:3000 -e MYSQL_HOST=mysql --name test --network mynetwork twitter-alpha

注意事项

  • 确保两个容器都加入了同一个自定义桥接网络mynetwork,Docker默认的bridge网络不支持DNS解析功能
  • 确保MySQL容器的名称没有拼写错误,DNS解析是和容器名严格匹配的

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:36:03