mac上navicat连接docker mysql应填localhost(前提是-p显式映射端口如3306:3306),host.docker.internal仅用于容器内访问宿主机;wsl2或linux docker需用宿主机ip或手动添加--add-host参数。
navicat 主机地址填 localhost 还是 host.docker.internal?
mac 上绝大多数情况填 localhost 就能连上,前提是容器端口已正确映射到宿主机(比如 -p 3306:3306)。host.docker.internal 是 docker desktop for mac 自带的特殊 dns 名,只在容器内部访问宿主机时有用,navicat 运行在 mac 本机,不需要它。
例外情况:如果你用的是 WSL2 或 Linux 环境下的 Docker(非 Docker Desktop),localhost 指向的是 WSL2 虚拟机自身,此时 Navicat 必须填宿主机真实 IP(如 192.168.x.x)或手动配置 --add-host=host.docker.internal:host-gateway 后才可用该域名。
- Mac + Docker Desktop → 填
localhost,端口对应映射的宿主机端口(如3306或3307) - WSL2 + Docker CLI → 不要用
localhost,查 Mac 的局域网 IP 并填入 - Linux Docker(非 Desktop)→ 默认不支持
host.docker.internal,必须加--add-host参数或直接用宿主机 IP
MySQL 容器连不上?先检查这三件事
Navicat 报错“Connection refused”或“Can’t connect to MySQL server”,90% 是以下三个环节出问题:
- 运行容器时没加
-p显式映射:只写-p 3306是无效的,Docker 会随机分配宿主机端口;必须写成-p 3306:3306或-p 3307:3306 -
docker ps输出的PORTS列没有显示0.0.0.0:3306->3306/tcp→ 说明映射失败,删掉容器重跑 - MySQL 8+ 默认用
caching_sha2_password插件,而旧版 Navicat(v16.2 及更早)不兼容,报错Authentication plugin 'caching_sha2_password' cannot be loaded;解决方法是进容器执行:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password'; FLUSH PRIVILEGES;
SQL Server 容器连接失败常见原因
Mac 上跑 SQL Server 容器(mcr.microsoft.com/mssql/server),Navicat 连接失败通常卡在密码或端口上:
- SA 密码不符合复杂度要求:必须含大小写字母、数字、特殊字符,且 ≥8 位;
YourStrong!Passw0rd是安全底线,123456会直接导致容器启动失败 - 端口映射写错:SQL Server 默认监听
1433,命令中必须写-p 1433:1433;如果宿主机 1433 被占用,可改用-p 1434:1433,Navicat 主机填localhost,端口填1434 - 容器内存不足:SQL Server 最低需 4GB 内存,Docker Desktop 设置里要调高 Memory Limit,否则容器反复重启,
docker logs sql_server_demo会看到Out of memory提示
Navicat 测试连接成功但无法建库/执行 SQL?
测试连接通过 ≠ 权限就位。MySQL 容器默认只允许 root@localhost,而 Navicat 是从宿主机发起连接,等效于 root@'172.17.0.1' 或 root@'%',必须显式授权:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
进容器执行:docker exec -it mysql-container mysql -uroot -p,然后运行:
CREATE USER 'root'@'%' IDENTIFIED BY 'your_password'; GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
注意:GRANT ALL ON *.* 是开发环境快捷方案;生产环境应限定数据库名和权限类型(如 SELECT,INSERT)。
SQL Server 不需要额外授权,只要 SA 密码正确、端口通、容器在运行,Navicat 就能建库执行 T-SQL —— 但它对中文字符集支持弱,导入含中文的 .sql 文件前,务必在 Navicat 连接设置里勾选 Use Unicode UTF-8,否则乱码无法回滚。










