建筑
Client
↓
Port 27017 (MongoDB protocol)
↓
FerretDB container
↓
PostgreSQL container (internal Docker network)
↓
Persistent storage directory
FerretDB 在内部将 MongoDB 线路协议请求转换为 PostgreSQL 查询。
PostgreSQL 不会公开暴露。
端口
- 27017/tcp → 公开的 MongoDB 兼容端点
- 5432/tcp → 内部 PostgreSQL(不对外暴露)
访问
凭据参考: /root/ferretdb/.env
如有需要,安装客户端:
apt install -y mongodb-mongosh
使用身份验证连接:
mongosh "mongodb://<USERNAME>:<PASSWORD>@<SERVER_IP>:27017/<DATABASE>?authSource=postgres"
重要文件与目录
- 安装目录:
/root/ferretdb - 编写文件:
/root/ferretdb/docker-compose.yml - 环境变量文件:
/root/ferretdb/.env - PostgreSQL 数据目录:
/root/ferretdb/data
服务管理
查看状态:
docker ps
查看日志:
docker compose -f /root/ferretdb/docker-compose.yml logs -f
重启服务:
docker compose -f /root/ferretdb/docker-compose.yml restart
常用 MongoDB 命令
列出数据库:
show dbs
切换数据库:
use postgres
列出集合:
show collections
查看文档:
db.collection_name.find()
插入文档:
db.collection_name.insertOne({ name: "example" })
退出 shell:
exit
为安全起见,将 FerretDB 绑定到 Localhost
已启用身份验证,但暴露的数据库服务仍存在风险。
编辑: /root/ferretdb/.env
改变 HOST=0.0.0.0 to HOST=127.0.0.1
然后应用更改:
docker compose -f /root/ferretdb/docker-compose.yml up -d
现在该服务无法从外部访问。
使用 SSH 端口转发进行访问。
在本地机器上执行:
ssh -L 27017:localhost:27017 root@<SERVER_IP>
然后在本地连接:
mongosh "mongodb://<USERNAME>:<PASSWORD>@localhost:27017/<DATABASE>?authSource=postgres