核心是分离应用与数据、明确网络通信、正确配置连接参数;不推荐SQLite,应使用MySQL/MariaDB等外部数据库,通过专用桥接网络和匹配的环境变量(如database__connection__host=ghost-db)实现容器间安全连接。

在Docker中部署Ghost博客并接入外部数据库,核心是分离应用与数据、明确网络通信、正确配置连接参数。不推荐用默认的SQLite,尤其在生产环境——它单机、无并发保护、扩容困难。
准备基础环境与网络
确保宿主机已安装 Docker 和 docker-compose(建议 2.20+)。启动服务后,先创建专用桥接网络,让 Ghost 和数据库容器能互通:
- 运行
docker network create ghost-net创建隔离网络 - 避免使用默认 bridge 网络,防止 IP 冲突或 DNS 解析失败
- 后续所有容器都通过
--network ghost-net加入该网络
启动 MySQL/MariaDB 容器
Ghost 支持 MySQL、MariaDB、PostgreSQL,MySQL 5.7+ 或 MariaDB 10.5+ 最稳妥。用环境变量初始化数据库和用户:
- 命令示例(MariaDB):
docker run -d \<br> --name ghost-db \<br> --network ghost-net \<br> -e MYSQL_ROOT_PASSWORD=secret_root \<br> -e MYSQL_DATABASE=ghost \<br> -e MYSQL_USER=ghost_user \<br> -e MYSQL_PASSWORD=ghost_pass \<br> -v /path/to/mysql/data:/var/lib/mysql \<br> -p 3306:3306 \<br> mariadb:10.11
- 注意挂载目录需有写权限;
-p 3306:3306仅用于本地调试,生产环境建议关闭端口映射,只允许同网络容器访问
配置 Ghost 容器连接 MySQL
Ghost 官方镜像支持通过环境变量直接覆盖数据库配置,无需进容器改 JSON 文件。关键字段必须匹配数据库实际设置:
- 必需环境变量:
NODE_ENV=productionurl=http://your-domain.com(不能是 localhost 或 127.0.0.1)database__client=mysqldatabase__connection__host=ghost-db(容器名,Docker DNS 自动解析)database__connection__user=ghost_userdatabase__connection__password=ghost_passdatabase__connection__database=ghost - 若用 docker-compose.yml,这些变量写在
ghost服务的environment下即可 - Ghost 启动时会自动创建表结构,首次连接失败通常因用户名/密码错、库不存在或网络不通
验证与排错要点
部署后不是“启动就完事”,要主动确认连通性:
- 执行
docker logs -f ghost查看启动日志,重点找Database initialisation或Connection refused类提示 - 测试容器间连通:
docker exec -it ghost ping ghost-db,再试telnet ghost-db 3306(需容器内装 telnet) - 如果数据库是宿主机上的 MySQL(非容器),
host应填host.docker.internal(Mac/Win)或172.17.0.1(Linux),且宿主机 MySQL 需绑定0.0.0.0并授权远程用户


















