当前位置: 首页 > news >正文

如何共用一台服务器主机,防止微服务出现冲突?

背景:

我是一名武汉的研发人员,我们北京的总部也有一个研发人员。我们共用一台服务器,现在的问题是,我部署的9个微服务跟 他部署的8个微服务,有冲突,我启动docker-compose up 的时候,就起不来。必须把他的 8个服务都停掉。如何让双方的微服务都起来,且不互相干扰呢

 

问了gemini 2.5 pro think,感觉说的靠谱,记一下。

================================

1.增加网络字段

2.隔离端口

3.启动的时候,增加一个名字,防止名字容器名字冲突。

============================

AI答案:

您好!这是一个非常典型的多租户开发环境下的问题,根本原因在于你们两边的 docker-compose 环境在 网络和端口 上发生了冲突。当 Docker 尝试将一个已经被占用的主机端口(Host Port)分配给新的容器时,就会启动失败。

解决方案的核心思想是:通过自定义网络和端口规划,将两套环境彻底隔离开。

下面是具体的操作步骤和建议,您可以和您北京的同事一起协作完成。

第一步:为各自的环境创建独立的 Docker 网络

默认情况下,docker-compose 会创建一个以项目目录名或自定义项目名为前缀的默认网络。当两边项目名或目录名可能相同时,容易产生混乱。最佳实践是为每一套环境明确定义一个独立的网络。

操作: 在你们各自的 docker-compose.yml 文件中,添加 networks 配置。

例如,在您的 docker-compose.yml (武汉) 文件中:

version: '3.8'services:# 您的 9 个微服务...my-service-1:image: some-imagenetworks:- wuhan_net # 将服务连接到这个网络# ...其他配置my-service-2:image: another-imagenetworks:- wuhan_net # 将服务连接到这个网络# ...其他配置# ... 其他 7 个服务# 在文件末尾定义这个新网络
networks:wuhan_net:driver: bridge # 使用桥接模式

在您同事的 docker-compose.yml (北京) 文件中:

version: '3.8'services:# 他的 8 个微服务...his-service-a:image: some-image-anetworks:- beijing_net # 将服务连接到这个网络# ...其他配置his-service-b:image: some-image-bnetworks:- beijing_net # 将服务连接到这个网络# ...其他配置# ... 其他 6 个服务# 在文件末尾定义这个新网络
networks:beijing_net:driver: bridge

效果: 这样做之后,你们各自的所有微服务都会在自己的“虚拟局域网”(wuhan_netbeijing_net)中运行。网络层面已经隔离,服务之间不会串扰。


第二步:规划并修改端口映射(最关键的一步)

网络隔离后,最大的冲突点——主机端口(Host Port)——仍然存在。你们必须协商一个端口使用规范,确保映射到服务器物理端口的号段是错开的。

端口映射的格式是 "主机端口:容器端口" ("HOST:CONTAINER")。冲突的原因是主机端口被重复使用了。

操作: 协商一个端口范围。例如:

  • 武汉团队:使用 9000 - 9999 范围的主机端口。
  • 北京团队:使用 8000 - 8999 范围的主机端口。

例如,修改您的 docker-compose.yml (武汉) 文件:

# ...
services:my-service-1:image: some-imagenetworks:- wuhan_netports:- "9001:8080" # 假设容器内部端口是8080,映射到主机的9001my-database:image: mysql:8networks:- wuhan_netports:- "9306:3306" # 映射到主机的9306
# ...

修改您同事的 docker-compose.yml (北京) 文件:

# ...
services:his-service-a:image: some-image-anetworks:- beijing_netports:- "8001:8080" # 同样是8080端口的服务,映射到主机的8001his-database:image: postgres:14networks:- beijing_netports:- "8432:5432" # 映射到主机的8432
# ...

效果: 现在,即使你们的两个 redis 服务或者 api-gateway 服务在容器内部都使用 63798080 端口,但它们映射到服务器主机上的端口是 9379837990808080,完全不会冲突。


第三步:使用 -p 参数指定项目名称(可选,但推荐)

为了进一步确保 docker-compose 创建的容器和网络名称不会意外冲突,可以在运行时使用 -p--project-name 参数为各自的项目指定一个唯一的名称。

操作:

  • 您启动服务时:
    cd /path/to/your/projectdocker-compose -p wuhan up -d
  • 您同事启动服务时:
    cd /path/to/his/projectdocker-compose -p beijing up -d

效果: 这样 docker-compose 创建的所有资源(容器、网络等)都会带上 wuhan_beijing_ 的前缀,例如 wuhan_my-service-1_1,在 docker ps 中一目了然,管理起来也更清晰。

总结一下核心思路

  1. 网络隔离:通过在 docker-compose.yml 中定义 networks,让两套环境跑在各自独立的虚拟网络里。
  2. 端口隔离:协商好不同的主机端口范围,修改 ports 映射,这是解决启动冲突的关键。
  3. 项目隔离:使用 docker-compose -p <project_name> 命令来防止所有Docker资源(容器、网络卷等)的命名冲突。

完成以上步骤后,你们就可以在同一台服务器上同时运行两套微服务环境,而不会互相干扰了。希望这个方案能彻底解决你们的问题!

演示/实测/效果:

 

参考资料:

http://www.sczhlp.com/news/46188/

相关文章:

  • 学做西点的网站品牌营销策划有限公司
  • 怎么做收费视频网站上海seo推广公司
  • 更改wordpress主题字体颜色深圳网站建设推广优化公司
  • 成都网站建设 川icp备互联网创业项目
  • excel导入导出java报错汇总
  • AXUI前端框架推出全新自定义主题颜色工具
  • 如何下载 嵌入模型 并导出为 onnx 模型
  • 长春餐饮网站建设凡科建站怎么用
  • wordpress 亚马逊评论seo推广技巧
  • 做网站怎么推广柳州今日头条新闻
  • 企业北京响应式网站制作南宁网
  • 自己做网站建设手游推广平台有哪些
  • 网站服务器需要多少钱免费合作推广
  • asp.net网站开发案例教程泉州百度网站推广
  • 淄川政府网站建设公司什么是搜索引擎竞价推广
  • 邯郸市瑞荣网络科技有限公司优化一个网站需要多少钱
  • 北京注册公司最低注册资金云南seo网站关键词优化软件
  • jsp做的网站运行都需要什么网站优化方案设计
  • 网站建设费用包括哪些方面seo网络推广方法
  • 天津视频网站开发团队东莞百度seo排名
  • 青岛网站建设代理加盟衡阳网站建设
  • 网站建设需要找工信部吗会计培训班有用吗
  • 百度是网站吗个人网页模板
  • Office Tool Plus 安装激活office神器,一键安装稳步办公软件
  • 海淀企业网站建设上海网站营销seo电话
  • 广州设计网站培训班站外推广免费网站
  • 深圳网站建设 响应式设计开发长沙百度快速优化
  • 网站维护的内容和步骤怎么做网站优化
  • 网店推广发展趋势站长工具seo综合查询分析
  • C++ 并发编程与多线程详解