docker 部署redis、mongo、postgresql,报错:cannot assign requested address

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

使用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

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值