说明:
这次开启3台nginx 来做测试,名称为master,slave01,slave02
步骤:
tips:
这里在使用-v进行挂载目录时,出现了在宿主机里修改配置文件不生效的问题,解决办法:先启动一个nginx服务,但 不是挂载到宿主机上,把配置文件目录拷贝到宿主机上,再启动一个新的nginx服务进行挂载,使用docker-compose.yml并不会出现这个问题
启动第一个nginx服务,名称为master,端口为8080
docker run --name master -p 8080:80 -v /mnt/d/wsl_www/nginx-slb/conf/nginx:
/etc/nginx -v /mnt/d/wsl_www/nginx-slb/www:/usr/share/nginx/html -d nginx:1.20.1
#参数说明
--name 给容器起名称
-p 指定端口
-v 挂载目录
-d 以后台运行
由于在容器里编辑配置文件不方便,我就把它拷贝到宿主机里的挂载目录中,命令如下:
docker cp master:/etc/nginx/nginx.conf /mnt/d/wsl_www/nginx-slb/conf/nginx/
#这里只复制的主文件,主要是为了演示
启动另外两个nginx服务,名称slave01,slave02,端口为8081,8082
#slave01相关命令如下
docker run --name slave01 -p 8081:80 -v /mnt/d/wsl_www/nginx-slb/conf01/nginx:/etc/nginx -v /mnt
/d/wsl_www/nginx-slb/www01:/usr/share/nginx/html -d nginx:1.20.1
#slave02相关命令如下
docker run --name slave02 -p 8082:80 -v /mnt/d/wsl_www/nginx-slb/conf02/nginx:/etc/nginx -v /mnt
/d/wsl_www/nginx-slb/www02:/usr/share/nginx/html -d nginx:1.20.1
通过docker ps查看运行中的nginx服务
配置master的nginx.conf配置文件,添加如下内容
upstream abc {
server 172.21.105.60:8081;#这里的ip是个坑,下面有解释
server 172.21.105.60:8082;
}
再配置conf.d目录下的default.conf文件
重启master服务
docker exec -it master /etc/init.d/nginx reload
天坑:
我的环境如下:
- win10系统
- win10子系统wsl2的系统是ubuntu20.04
- ubuntu系统里安装docker服务
- nginx容器运行在docker里
我在一开始运行nginx负载均衡时,一直不成功,最后排查是因为是我的ip设置有问题,在真实服务器上不会有这问题,浪费了些时间
在这里会有几个ip需要说明一下
- win10系统里的ip
- ubuntu系统里的ip
- docker容器里的ip
我一开始配置的是upstream里的ip是直接写的容器里的ip,始终也不行,其实在真实环境里,直接 写内网地址就可以了,但是这里是不可以的!
最终的解决办法
一定要写ubuntu系统里的ip,也就是etho0对应的ip地址,网卡说的宿主机地址,也是指的docker容器所在的宿主机,也就是ubuntu20.04系统,千万不要把windows当成宿主机呀(血的教训!!!!)
本文暂时没有评论,来添加一个吧(●'◡'●)