网站首页 > 精选文章 / 正文
目录标题
- 1. 背景和问题
- 背景
- 问题
- 问题查找
- 2.解决思路和方案
1. 背景和问题
背景
项目使用了Nacos微服务架构,由于项目运行需要启动注册中心、网关、认证中心、分布式事务中心等多个微服务,非常占用物理机内存和CPU,所以部署了一个开发服务器,把这些服务运行在服务器上,我只需要运行自己正在开发的的服务模块就可以,这样开发用的物理机一下就释放了很多内存,开发起来更顺畅。
问题
但是问题来了,docker容器自动分配的ip为172.17.0.0/24网段的ip,开发用的物理机和这个容器不在一个网段,根本没法访问到,这时候网上查到docker有一种网络模式是–net=host,就是让容器直接使用宿主服务器的ip,这样开发用的物理机就能够访问这个容器的接口了。但是这时候所有服务启动后,出现了一个问题,一直打印一个错误信息:
Caused by: java.net.UnknownHostException: VM-**-centos: Name or service not known
问题截图如下
Caused by: java.net.UnknownHostException: VM-**-**-centos: Name or service not known
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323)
at java.net.InetAddress.getLocalHost(InetAddress.java:1500)
问题查找
首先我们找到这个报错的代码,分布式事务为了把自己注册到
事务中心,获取了自己服务器的IP,首先获取主机名称hostname,然后通过hostname转换成IP,就是这转换成IP时报错,unknown hostname
我们再看下报错信息,提示VM-**-centos这个域名找不到,但是我们发现,其中这个VM-**-centos就是宿主机的hostname(计算机名),试了下宿主机中可以ping通VM-**-centos,但是容器中ping不通,虽然docker容器继承了宿主机的hostname,但是却不识别。
2.解决思路和方案
这里代码中是先找到服务器的hostname,然后再获取IP,从这里入手,我们能不能给容器设置一个代码能识别的hostname ,这样代码就能够识别并获取到这个IP了,网上查询资料后找到下面的运行参数
docker run --net=host --hostname=自定义主机名 image名
这里使用了–hostname=localhost 和–hostname=192.168.54.13 都是可以的,最终问题解决,启动后没再报错
Tags:docker查看容器详细信息
猜你喜欢
- 2024-12-04 Docker容器最全详解(万字图文总结)
- 2024-12-04 Docker容器间网络互联原理,讲不明白算我输
- 2024-12-04 Docker、Podman 容器"扫盲"
- 2024-12-04 docker windows环境下通过IP访问容器内服务的方法
- 2024-12-04 Docker学习11 容器原理 Network Namespace每天几分钟进步一点点
- 2024-12-04 Docker经典面试题:容器是如何访问外网的?
- 2024-12-04 Docker从入门到精通:Docker 容器数据卷详解
- 2024-12-04 Docker查看log的几个常用命令
- 2024-12-04 docker开启容器后,修改配置文件解决忘记映射端口号问题
- 2024-12-04 Docker容器最全详解(图文全面总结)