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

Ubuntu服务器Docker部署多MySQL容器3307端口无法连接问题

核心故障原因

第二个MySQL实例无法连接的核心原因是端口映射配置错误。
MySQL官方容器镜像默认内部服务固定监听3306端口,不会随宿主机映射端口自动调整内部监听端口。你当前配置中mysql-db_2的端口规则写为'3307:3307',本质是将宿主机3307端口转发到容器内部的3307端口,但容器内MySQL服务从未在3307端口启动监听,自然无法建立连接。

排查验证步骤

按以下顺序逐一排查可快速定位问题:

  • 检查容器运行状态:执行docker compose ps,确认mysql-db_2状态为Up,不存在异常重启、退出的情况
  • 校验端口映射规则:执行docker compose port mysql-db_2 3306,如果返回空或报错,直接说明端口映射配置不符合MySQL容器的默认规则
  • 验证容器内部服务可用性:执行docker exec -it <mysql-db_2容器ID> mysql -uroot -p,如果能正常登录,说明MySQL服务本身运行正常,问题完全出在端口转发层
  • 检查端口拦截规则:云服务器需确认安全组放开3307端口入站规则;本地Ubuntu服务器执行ufw status确认系统防火墙未拦截3307端口流量
修复方案
  1. 调整docker-compose.yml中mysql-db_2的配置,修正端口映射,同时补充必填的root密码环境变量(缺失该变量会导致MySQL容器初始化失败),建议和第一个实例保持镜像版本一致避免兼容问题:
mysql-db_2:
    image: mysql:8.0.28-debian # 和第一个实例版本对齐,避免默认latest版本带来的差异
    command: --sql_mode="" --default-authentication-plugin=mysql_native_password
    restart: always
    ports:
      - '3307:3306' # 规则为 宿主机端口:容器内部端口,容器内部固定用3306
    volumes:
      - ./data_2/files:/var/lib/mysql-files
      - ./data_2/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 自定义的root用户密码 # MySQL8.0容器必须配置该参数才能正常初始化
  1. 清理异常初始化残留(如果之前因为配置错误启动过):
    执行rm -rf ./data_2/data/*删除旧的错误初始化数据,避免新容器启动时读取到损坏的初始化文件导致异常。
  2. 重建容器生效配置:
    执行docker compose up -d mysql-db_2重新创建第二个MySQL实例。
  3. 连接验证:
    等待10~30秒待MySQL完成初始化后,执行mysql -h 127.0.0.1 -P 3307 -uroot -p输入设置的密码即可正常连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:54:32