使用docker部署数据持久化服务十分方便,直接下载一个镜像,run就好了。
或者使用docker-compose,连指令都不用记了
version: '3'
services:
mongo:
container_name: mongo
network_mode: bridge
image: "mongo:4.0.6"
ports:
- "27017:27017"
volumes:
- /data/mongo/data:/data/db
command: ["mongod","--dbpath","/data/db"]
restart: always
version: '3'
services:
redis:
container_name: redis
image: "redis:5.0.3"
ports:
- "6379:6379"
volumes:
- /data/redis/redis.conf:/etc/redis/redis.conf
- /data/redis/data:/data
command: redis-server /etc/redis/redis.conf
restart: always
version: '3'
services:
postgres:
container_name: postgres
image: "postgres:9.6.12"
privileged: true
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=${pwd}
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
- /data/postgres/data:/var/lib/postgresql/data/pgdata
restart: always
使用上述脚本,直接docker-compose up -d,即可启动。
但是有一个问题,以redis为例,这样部署默认绑定的地址(0.0.0.0)是任意的,如果部署在公网上,就很容易受攻击,甚至植入病毒进程。
于是,采取修改配置文件的方法。
postgresql部分:
pg_hba.conf中的

postgresql.conf中的

redis部分:
redis.conf中的

mongodb部分:
mongod --bind_ip 内网地址
问题:
经过以上修改,发现均不能成功,都会报错:
Could not create server TCP listening socket 192.168.x.x:xxxx: bind: Cannot assign requested adress
经过查资料,了解到redis bind的实际上是机器的网卡ip,而不是允许外部接入的ip,敲
ifconfig
查看本机ip表,确实是有这个ip的,但是就是启动不成。
解决:
首先排除端口占用,执行
netstat -anp | grep 端口
查看端口是否已经占用,如果占用就kill掉,如果没占用继续下一步。
因为任意一个数据库,使用docker启动,它都是要在docker容器内部运行的,docker内部一般不会有你指定的内网ip地址,因此,怎么试,都不会分配成功的。(要清楚配置项中的bind的是什么,存在于什么位置)
docker run -p 宿主机端口:容器端口 ...
但是要解决只能内网访问,防止被攻击的问题,就需要指定一个内网地址(手动选择一个网卡),否则就会取宿主机的默认网卡作为映射,当这个网卡是公网地址时,就有问题了,等于还是用公网地址做的映射,还是会被外部访问到。
因此,需要手动指定一张内网地址的网卡,让docker去映射:
docker run -p 宿主机内网IP:宿主机端口:容器端口
区别于上一个操作,多一个宿主机内网IP即可。
# similar to
docker run -d -p 192.168.x.x:6379:6379 --dbpath xxx --logpath redis:latest
# similar to
version: '3'
services:
redis:
container_name: redis
image: "redis:5.0.3"
ports:
- "192.168.12.1:6379:6379"
volumes:
- /data/redis/redis.conf:/etc/redis/redis.conf
- /data/redis/data:/data
command: redis-server /etc/redis/redis.conf
restart: always

本文详细介绍了如何使用Docker部署MongoDB、Redis和PostgreSQL等数据库服务,并重点讲解了如何通过修改配置文件和指定内网地址来增强服务的安全性,避免因公网暴露而遭受攻击。
836

被折叠的 条评论
为什么被折叠?



