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

M1芯片Mac下Docker Compose启动MySQL容器端口未开放无法连接

解决M1 Mac上Docker Host模式下MySQL无法访问的问题

问题根源

Docker Desktop for Mac(包括M1芯片机型)基于HyperKit虚拟机运行容器,network_mode: "host" 并不会让容器直接接入Mac宿主机的网络栈,而是接入虚拟机自身的网络。这就导致:

  • docker ps 不会显示端口映射(host模式下无需映射,但实际容器端口仅在虚拟机内可访问)
  • 直接用Mac的localhost或127.0.0.1无法通过JDBC连接MySQL

另外,expose 只是声明容器内开放的端口,不会做任何端口转发或映射,对外部访问没有实际作用。

可行解决方案

方案1:改用端口映射(推荐)

放弃network_mode: "host",改用ports配置直接映射端口到Mac宿主机,修改docker-compose.yaml中MySQL服务的配置:

services:
  mysql:
    # 移除 network_mode: "host"
    ports:
      - "3306:3306"  # 宿主机端口:容器端口
    # 其他配置...

重新启动容器:

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

此时docker ps会显示端口映射,直接用localhost:3306即可通过JDBC连接MySQL。

方案2:继续使用Host模式(不推荐)

如果必须保留network_mode: "host",需要连接Docker虚拟机的IP而非Mac的localhost:

  1. 执行以下命令获取Docker虚拟机的IP地址:
docker run --rm alpine ip route | grep default | awk '{print $3}'
  1. 使用获取到的IP代替localhost,比如虚拟机IP是192.168.65.3,则JDBC连接地址为jdbc:mysql://192.168.65.3:3306/xxx

关键提示

  • M1 Mac上的Docker Host模式和Linux原生Docker差异极大,除非有特殊需求,优先使用端口映射方案更稳定。
  • expose 仅用于容器间通信的端口声明,不影响外部访问,无需保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:47:36