安装 Typecho 记录
你现在这个情况,其实是 两个问题叠在一起了,但本质很清晰:网络 + MySQL host权限
我帮你拆开讲清楚,你就不会再踩坑。
✅ 一、先解决你当前核心架构
你现在是:
- Typecho:跑在 宿主机 PHP
- MariaDB:跑在 Docker 容器
- 所以连接路径是:
👉 宿主机 → Docker bridge 网络 → MariaDB
❗ 二、你刚才失败的原因
❌ 1. 用 mariadb118(容器名)
报错:
getaddrinfo for mariadb118 failed
原因:
👉 宿主机 DNS 解析不了 Docker 容器名
✔ 结论:
宿主机 PHP ❌不能直接用容器名访问数据库
❌ 2. user host 不匹配
你最初是:
'typecho_user'@'127.0.0.1'但实际连接是:
172.19.0.1所以被拒绝。
✅ 三、正确做法(推荐标准方案)
✔ 方案:允许 Docker 网段(最佳)
执行:
CREATE USER 'typecho_user'@'172.19.%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON typecho_db.* TO 'typecho_user'@'172.19.%';
FLUSH PRIVILEGES;👉 或更简单(开发/个人服务器推荐):
CREATE USER 'typecho_user'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON typecho_db.* TO 'typecho_user'@'%';
FLUSH PRIVILEGES;✅ 四、Typecho 安装页面怎么填(关键)
因为你是 宿主机 PHP + Docker MariaDB
所以 DB_HOST 要填:
✔ 正确填写方式(3选1)
⭐ 推荐(最稳)
127.0.0.1前提:你 MariaDB 已映射端口,比如:
-p 3306:3306⭐ 或(如果宿主机有 docker bridge IP)
172.19.0.2(MariaDB 容器 IP,不推荐,容易变)
❌ 不要用:
mariadb118 ❌(宿主机解析不到)✅ 五、你现在最推荐架构(强烈建议)
如果你 MariaDB 是 Docker:
✔ 建议改成“宿主机访问 Docker”
1️⃣ docker run / compose 必须映射端口
确认:
ss -tlnp | grep 3306应该看到:
0.0.0.0:33062️⃣ Typecho 安装填写:
| 项目 | 值 |
|---|---|
| 数据库地址 | 127.0.0.1 |
| 数据库名 | typecho_db |
| 用户 | typecho_user |
| 密码 | KYOlkUCjI18kU3 |
| 前缀 | 默认 |
🚀 六、一句话总结
你现在必须记住这个核心原则:
❗ 宿主机 PHP = 不能用 Docker 容器名
❗ Docker MySQL = 必须用 IP 或端口映射访问
❗ MySQL 用户 = 必须匹配来源 IP(172.19.% 或 %)
如果你想进一步优化(推荐)
我可以帮你把这套结构升级成:
🔥 标准生产架构
- Typecho(PHP-FPM + Nginx)
- MariaDB(Docker)
- Redis(缓存)
- 统一 1Panel / Caddy 反代
- 自动备份脚本
会比你现在稳定一档。
只要你说一声 👍
版权声明:本文为原创文章,版权归 Hello World 所有,转载请联系博主获得授权。
本文地址:https://tc.isrv.cn/index.php/archives/3/
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。