Docker部署java项目(Kafka消费者)报错,错误信息:
Failed to construct kafka consumer
及
No resolvable bootstrap urls given in bootstrap.servers
,中间会有警告信息:
Removing server cdh1.tw9.com:9092 from bootstrap.servers as DNSresolution failed for cdh1.tw9.com
因为idea启动或着jar包启动项目使用的是本机的/etc/hosts
配置解析(如果这个都没配你玩个鸡儿)不会有错误信息;
但使用docker部署,容器内部的/etc/hosts
没有进行配置,所以dns解析域名地址会报错
解决思路:修改容器内/etc/hosts配置或共享宿主/etc/hosts数据
解决方案:
一:直接进入容器中修改
/etc/hosts
,重启容器后,增加的内容会丢失。
二:在制作镜像的时候,直接修改。这种方式需要你是root用户,
/etc/hosts
文件对于普通用户是没有权限的。所以你还要在容器中安装sudo,增大了镜像大小,不建议使用。
三:使用docker run运行一个新的容器的时候,通过参数–add-host来添加域名和IP信息到容器的/etc/hosts文件中。
docker run --add-host=cdh1.tw9.com:192.168.9.1 --name server -d service-image
四:使用docker-compose,在
docker-compose.yml
文件中,通过配置参数extra_hosts
来实现。例如:extra_hosts: - "somehost:162.242.195.82" - "otherhost:50.31.209.229"
进入容器查看/etc/hosts可以看到相应配置;
五:共享宿主
/etc/hosts
:
容器"共享"宿主机的hosts文件(终极方案)
参考:
如何修改docker容器中的hosts文件
Docker Compose 配置文件详解
容器"共享"宿主机的hosts文件(终极方案)