前言
同学发的一个springcloud项目,在本地运行成功,试图将它部署到docker上。买的是学生服务器,第一次尝试,文章可能会有很多错误,请谅解。
服务器:阿里云 2核2GB Docker:19.03
问题
1、分别部署了zookeeper dubbo之后,再部署微服务,但是微服务一启动,zookeeper和dubbo会挂掉
2、经常出现exited(137)
3、微服务会不断重新启动,注册不到dubbo上
解决
1、所有用到的端口,要在 阿里云的安全组 中添加规则,开放端口
2、外网连接zookeeper前,需要
①hostname 获得本机的hostname
②vi /etc/hosts 添加
本机外网IP 本机的hostname
3、因为zookeeper会把外网的IP和本机的IP映射错误,比如:
dubbo.registry.address=zookeeper://你的外网IP:2181
dubbo.registry.timeout=5000
dubbo.registry.protocol.name=dubbo
微服务中用到zookeeper的外网IP,会连接不上
所以需要在zoo.cfg文件中加quorumListenOnAllIPs=true
4、增加虚拟内存
- 创建swap分区 : dd if=/dev/zero of=/swapfile count=2048 bs=1M
- 激活swap分区 :chmod 600 /swapfile mkswap /swapfile
- 开启swap分区: swapon /swapfile
- 设置允许开机启用swap分区 : sudo vi /etc/fstab
TIPS
微服务部署时,可以使用docker-compose
1、安装docker-compose。
docker-compose-Linux-x86_64 下载地址:https://dn-dao-github-mirror.daocloud.io/docker/compose/releases
mkdir /usr/local/bin/docker-compose
将下载好的docker-compose-Linux-x86_64 放入文件夹
sudo chmod +x /usr/local/bin/docker-compose
docker-compose-v #检查是否安装成功
2、创建docker-compose.yml文件,docker-compose格式
#版本可以为2 或 3
version: '2'
services:
#名字
auth-service:
image: auth-service:1.0 #镜像
tty: true #防止容器启动又停止
restart: always #容器exited后,自动重启
mem_limit: 2G
mem_reservation: 200M
ports:
- 8079:8079
- 20882:20882
environment:
# 注册到注册中心的IP,这里我们选择宿主机的IP
DUBBO_IP_TO_REGISTRY: 宿主机的IP
# 注册到注册中心的端口
DUBBO_PORT_TO_REGISTRY: 20882
DUBBO_PORT_TO_BIND: 20882
3、在docker-compose.yml所在文件夹,启动 docker-compose
命令: docker-compose up -d