容器部署powerjob"/>
使用docker容器部署powerjob
1. 需求
最近有个需求,是要把powerjob-server集成进系统里面。我在本地做测试完全没有问题,但是当我把powerjob移到虚拟机的容器里面去部署,发现我的worker无法访问进去。
2. 发现问题
这里我就感觉非常奇怪了,我本地没问题,并且我部署了server之后,我在网页上也能访问到,但是为什么就是注册不进去呢?
3. 排查问题
我就去看了一下日志和官方文档,大概率多网卡导致 可以在worker看下current serve的地址,然后应该发现和你的nat地址不在同一段。
然后我访问http://192.168.116.128:7700/server/hello,把ip换成你的ip地址,神奇的出现了,我本来server是192.168开头的,访问这个ur,赫然发现成了172.19。
于是我去ping了一下,肯定是ping不通的啦。
我看官网的解决方法,是绑定address的地址
于是我去试了一下,没有任何用,我指定了参数,但是还是和之前一样。
4. 解决问题
经过百般思索,然后我就尝试了一下,指定虚拟机的ip与本地通用,意思就是指定容器的网络模式为host。
yml文件贴在下面:
powerjob:image: tjqq/powerjob-server:latestcontainer_name: powerjob-serverrestart: alwaysports:- 7700:7700- 10010:10010- 10086:10086network_mode: hostvolumes:- /data/docker-compose/powerjob:/root/powerjob/server- ~/.m2:/root/.m2environment:JVMOPTIONS: "-Xmx512m -Dpowerjobwork.local.address=192.168.116.128"PARAMS: "--oms.mongodb.enable=false --spring.profiles.active=product --spring.datasource.core.jdbc-url=jdbc:mysql://ip:3306/powerjob-product?useUnicode=true&characterEncoding=UTF-8 --spring.datasource.core.username=root --spring.datasource.core.password=your_password"
在host模式下,好像不用指定端口,我没在意,就这样部署上去了。
再去查看日志,可以看到日志出现了变化, 现在7700/10010/10086这三个端口都是绑定在正确的虚拟机上面,然后访问网页,可以注册进去了!
5. 友情提醒
最后提醒一下大家哈,每个人可能遇到的情况不一样,这只是我个人的解决方法,欢迎大家来交流!
后续:不使用host模式,进行部署,一样实现调度
除了host模式,一般我们在部署的时候,为了满足集群部署,docker容器化的特性。我们需要它在桥接模式下也能正常使用
经过反复的配置和测试,终于发现了,可以根据这个来实现应用在本地,server在服务器的调度了
这个配置需要在worker和server两端都进行配置
在idea中,我在VM options中配置了启动参数
-Dpowerjobwork.external.address=172.16.***.*** -Dpowerjobwork.external.port=27777
这个是我本机的IP地址。
然后我在启动server的时候,在docker-compose文件中,同样添加JVM启动参数
JVMOPTIONS: "-Xmx512m -Dpowerjobwork.external.address=192.168.***.*** -Dpowerjobwork.external.port.http=10010 -Dpowerjobwork.external.port.akka=10086"
这个启动参数中的IP是我服务器的地址,而不是docker网络的地址。
然后访问下面这个地址,你可以看到下面的externalAddress这个地址不再是你容器的地址,而是你服务器的地址。到这基本上就成功了!
其他的就是按照官网的部署方式来就行
更多推荐
使用docker容器部署powerjob
发布评论