一个网络配置居然引起端口冲突?

 转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。


事故背景:

有小伙伴要部署一套sonar,使用docker-compose部署,在运行了启动命令之后,发现服务没有起来,容器处于exit状态。

原因分析:

1. 查容器日志

docker logs查看未启动的sonar容器日志,发现没有起来的是里面的es服务,在容器刚刚运行不久,日志就开始报错了,关键信息:

Caused by: java.util.concurrent.ExecutionException: org.apache.http.ProtocolException: Not: a valid protocol version: This is not a HTTP port

问题肯定出在es服务的端口上。

2. 查内部服务日志

因容器内部的服务日志已经挂载到了本地,于是查找es服务相关日志,发现了一行关键信息:

Caused by: java.net.BindException: Address already in use

这是端口冲突了。但小伙伴说自己yaml的端口是特意避开了主机上已有的端口,照理说不会产生端口冲突的。

3. 查yaml文件

查看小伙伴使用的yaml文件,发现了关键信息:

  • yaml文件设置了network_mode: host

  • yaml文件还设置了端口挂载9200:9201

真相大白:

yaml文件是从另一台机器上copy过来的,小伙伴只注意到了主机上已经有了一个9200端口,他将9200端口映射到了主机上的9201。但没注意到yaml中设置了network_mode: host,容器使用了主机模式。因此在启动sonar的时候,容器里面的9200端口在主机上会启动,于是和已经占用的9200端口产生了冲突。

解决方案:

注释掉yaml文件中的network_mode: host,重新部署即可。

博主相关文章:

总结—elasticsearch启动失败的几种情况及解决

升级Elasticsearch到8.7.1版本,我给自己挖了很多坑......

更多精彩,欢迎关注SRE成长记一起探讨学习!↓↓↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值