Docker compose-实现多服务、nginx负载均衡、--scale参数解决端口冲突问题
compose
compose - Docker Compose是一个用于定义和运行多容器Docker应用程序的工具,通过Compose文件格式简化应用部署过程。
项目地址:https://gitcode.com/gh_mirrors/compose/compose
·
Docker compose-实现多服务、nginx负载均衡、--scale参数解决端口冲突问题
问题:scale参数端口冲突
当使用如下docker-compose.yml配置,启动web为3个服务时,会出现端口冲突问题:
version: '3'
services:
web:
build: ../
ports:
- "5000:5000"
redis:
image: redis:3.0.7
启动命令:
docker-compose up --scale web=3
分析,ports: -“5000:5000”,主机5000端口映射到容器内的5000端口,如果多个启动容器,就会出现端口真占用冲突的问题
解决方法:nginx实现多服务、负载均衡
注意:原始项目构造请看Docker Compose的安装教程、使用教程示例的使用教程。
修改docker-compose.yml配置
如下:
version: '3'
services:
web:
build: ../
expose:
- "5000"
redis:
image: redis:3.0.7
ngixn:
image: nginx:latest
volumes:
- ../nginx_conf/nginx.conf:/etc/nginx/nginx.conf:ro
ports:
- "4000:4000"
对比上面的2个docker-compose.yml,修改的地方在于:
- web服务去掉
ports参数,改为expose参数,解释:web容器内的5000端口不对主机开放,但是对关联的其他服务容器开放,其他容器可以访问web容器的5000端口 - 增加nginx配置
- valumes:挂载数据卷,将
../nginx_conf/nginx.conf文件挂载到容器内的/etc/nginx/nginx.conf文件,nginx容器将以../nginx_conf/nginx.conf启动nginx - ports:主机4000端口映射到nginx容器内的4000端口
- valumes:挂载数据卷,将
新增nginx本地配置文件
在目录../nginx_conf/下新增nginx.conf文件,如下:
user nginx;
events {
worker_connections 1000;
}
http {
server {
listen 4000;
location / {
proxy_pass http://web:5000;
}
}
}
监听容器的4000端口,将请求转发到web服务的5000端口
验证
启动容器
docker-compose up --scale web=3
输出如下:

容器启动正常
查看容器状态
docker ps
如下

可以看到,3个web容器的5000端口如预期一样,没有开放给主机,主机4000端口映射到nginx容器内的4000端口。
访问web应用
访问虚机的4000端口,按照预期将会看到出现3个不同的容器名,如下



总结:Docker compose通过nginx实现了多服务、负载均衡场景,并不会出现端口冲突问题!
compose - Docker Compose是一个用于定义和运行多容器Docker应用程序的工具,通过Compose文件格式简化应用部署过程。
最近提交(Master分支:5 个月前 )
25cfa66a
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
4 天前
f160333e
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
5 天前
更多推荐




所有评论(0)