Docker compose-实现多服务、nginx负载均衡、--scale参数解决端口冲突问题

news/2024/3/29 20:40:30/文章来源:https://blog.csdn.net/qq_37279783/article/details/130382295

Docker compose-实现多服务、nginx负载均衡、--scale参数解决端口冲突问题

  • 问题:scale参数端口冲突
  • 解决方法:nginx实现多服务、负载均衡
    • 修改docker-compose.yml配置
    • 新增nginx本地配置文件
    • 验证
      • 启动容器
      • 查看容器状态
      • 访问web应用

问题: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.7ngixn:image: nginx:latestvolumes:- ../nginx_conf/nginx.conf:/etc/nginx/nginx.conf:roports:- "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端口

新增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实现了多服务、负载均衡场景,并不会出现端口冲突问题!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_103789.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux中的YUM源仓库和NFS文件共享服务(うたかたの夢)

YUM仓库源的介绍和相关信息 简介 yum是一个基于RPM包(是Red-Hat Package Manager红帽软件包管理器的缩写)构建的软件更新机制,能够自动解决软件包之间的依赖关系。 yum由仓库和客户端组成,也就是整个yum由两部分组成&#xff0…

Python小姿势 - 知识点:

知识点: Python的字符串格式化 标题: Python字符串格式化实例解析 顺便介绍一下我的另一篇专栏, 《100天精通Python - 快速入门到黑科技》专栏,是由 CSDN 内容合伙人丨全站排名 Top 4 的硬核博主 不吃西红柿 倾力打造。 基础知识…

Docker的实际应用

一、 数据持久化 我们什么情况下要做数据持久化呢? 一定是在做容器之前先预判好哪些文件是要永久存储的, 而不会跟着它容器的一个生命周期而消失。 比如说配置文件、 日志文件、 缓存文件或者应用数据等等。 数据初始化有三种类型。 第一种 volumes&…

什么是分库分表?为什么需要分表?什么时候分库分表

不急于上手实战 ShardingSphere 框架,先来复习下分库分表的基础概念,技术名词大多晦涩难懂,不要死记硬背理解最重要,当你捅破那层窗户纸,发现其实它也就那么回事。 什么是分库分表 分库分表是在海量数据下&#xff0…

SCI论文自由投稿Vs专栏投稿,哪个更好中?

我们首先来看下以下几种期刊的发表方式: 正刊 正刊也就是自由投稿方式的发表方式,是期刊正常出版的期刊,比如一本SCI期刊是双月刊,一年出版6期,没有设定主题,包含多个研究方向的文章。每年按照半月/月/双…

100种思维模型之指数对数思维模型-54

对数、指数,生活中的2种增长曲线;对数增长曲线,即在开始时增长很快,但随着时间的推移,收益会减少并变得更加困难;而指数增长曲线,即开始时增长缓慢,但随着时间的推移,收益…

word表格

1 样式入口 插入新的表格 “插入”选项卡 > “表格”光标放在表格内 > 出现“表格工具”选项卡“表设计”选项卡 > “表格样式”栏目 > 在随便一个样式上右键 > 弹出“右键菜单” 常用的是“新建/修改/删除表格样式““设为默认值”:将指定样式设为…

Android studio 使用入门

安装 安装JDK https://www.oracle.com/java/technologies/downloads/ 新增变量JAVA_HOME,值为JDK安装根目录 在path中增加 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 安装 Android studio https://developer.android.google.cn/studio/ 注意:路径尽量不要包…

每日学术速递4.25

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Long-Term Photometric Consistent Novel View Synthesis with Diffusion Models 标题:具有扩散模型的长期光度一致的新视图合成 作者:Jason J. Yu, Feresh…

Python 数据存储 ---->方式

我的个人博客主页:如果’真能转义1️⃣说1️⃣的博客主页 关于Python基本语法学习---->可以参考我的这篇博客:《我在VScode学Python》 数据存储是指在数据加工处理过程中将产生的临时文件或加工结果以某种格式保存。 常用的数据存储格式包括 TXT、Exc…

Ansys Zemax | 设计抬头显示器时要使用哪些工具 – 第一部分

本文演示了如何使用OpticStudio工具设计分析抬头显示器(HUD)性能,即全视场像差(FFA)和NSC矢高图。(联系我们获取文章附件) 初始结构 HUD简介 以下为HUD的示意图。液晶显示器作为光源发光,光线被HUD的两个反射镜反射,然后通过风挡玻璃反射&am…

【MySQL】MES中,发货计划取数逻辑

系列文章 C#底层库–MySQLBuilder脚本构建类(select、insert、update、in、带条件的SQL自动生成) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129179216 C#底层库–MySQL数据库操作辅助类(推荐阅读&#xff0…

聊聊 IP packet 的 TTL 与 tcp segment 的 MSL

聊聊 IP packet 的 TTL 与 tcp segment 的 MSL 1 前言 - 网络知识的重要性 近几年在排查解决应用系统在客户现场遇到的复杂问题时,越来越觉得除了扎实的LINUX操作系统知识,对TCP/IP网络知识的深入理解也是至关重要的。 有鉴于此,后续笔者会…

启英泰伦智能语音芯片在语音控制吸顶灯上的应用解决方案

随着智能控制技术的不断发展,人们对于家用电器的功能需求越来越多,智能吸顶灯是一种常见的照明设备,通常被安装在室内房顶上面,除了具有传统吸顶灯的照明功能外,还添加了智能控制和自动化功能,如远程控制、…

必须要知道的hive调优知识(下)

Hive如果不用参数调优,在map和reduce端应该做什么 1、map阶段优化 Map阶段的优化,主要是确定合适的map数。那么首先要了解map数的计算公式 num_reduce_tasks min[${hive.exec.reducers.max}, (${input.size}/${hive.exec.reducers.bytes.per.reducer…

《一次性分割一切》阅读笔记

目录 0 体验 1 摘要 2 十个问题 参考文献 0 体验 体验地址:SEEM - a Hugging Face Space by xdecoder 体验结果: 将哈士奇和汽车人从图片中分割出来。 1 摘要 尽管对于交互式人工智能系统的需求不断增长,但在视觉理解(例如…

Qt5.9学习笔记-事件(一)

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三…

对git的简单总结

Git的基本使用 配置用户名和邮箱常见的操作查看仓库的状态远端仓库整体流程分支本地分支命令远端分支命令 这几天在做毕业设计,需要用到git,所以简单总结一下git的基本使用。 配置用户名和邮箱 git config --global user.name "Your Name" g…

ai模型训练生成效果 chilloutmix_NiPrunedFp32Fix.safetensors

模型名称: chilloutmix_NiPrunedFp32Fix.safetensors 关键词 extremely detailed CG unity 8k wallpaper,(masterpiece),(best quality),(ultra detailed),(ultra realistic),(Best character details:1.2),dynamic angle,professional lighting, photon mapping, …

【22-23 春学期】人工智能基础--AI作业6-误差反向传播

老师发布作业链接:(429条消息) 【22-23 春学期】AI作业6-误差反向传播_HBU_David的博客-CSDN博客 目录 老师发布作业链接:(429条消息) 【22-23 春学期】AI作业6-误差反向传播_HBU_David的博客-CSDN博客 1.梯度下降 2.反向传播 3.计算图 4.使用Numpy…