JFrog Artifactory OSS 7.4.1安装后无法连接Router报错求助
先提炼下你的核心问题:在CentOS虚拟机全新安装jfrog-artifactory-oss-7.4.1后,启动时Artifactory和Access服务都无法连接到localhost:8046的Router,报错连接被拒绝/注册失败。
你提供的关键日志:
- Artifactory日志:
2020-04-18T11:53:25.305Z [jfrt ] [INFO ] [a88f4f6ce96d65bb] [o.j.c.ExecutionUtils:141 ] [pool-13-thread-1 ] - 集群加入:第5次重试:服务注册ping失败,将重试。尝试连接地址为‘http://localhost:8046/access’的本地Router时出错:连接localhost:8046 [localhost/127.0.0.1]失败:连接被拒绝(Connection refused)- Access日志:
2020-04-18T11:52:29.093Z [jfac ] [WARN ] [7b2c676f76c7ef43] [o.j.c.ExecutionUtils:141 ] [pool-6-thread-2 ] - 第20次重试,耗时9.54秒,失败:向URL为http://localhost:8046的Router注册失败,错误:UNAVAILABLE: io exception。将重试
Artifactory 7.x是微服务架构,Router是所有服务的核心入口和注册中心,所以这个问题的根源是Router服务未正常启动,或者没有监听8046端口。下面是具体的排查和解决步骤:
1. 先确认Router的状态和端口监听
首先检查Router进程是否在运行,以及8046端口是否被监听:
- 查看Router进程:
ps aux | grep router - 检查8046端口的监听状态(CentOS 7+推荐用
ss命令):ss -tulpn | grep 8046
如果没有任何结果,说明Router根本没启动,接下来直接看Router的启动日志找原因。
2. 查看Router的启动日志
Router的日志默认存放在$ARTIFACTORY_HOME/var/log/router/router.log,打开这个文件找启动失败的具体错误——常见原因包括:
- 8046端口被其他进程占用
system.yaml配置存在网络冲突- Router进程没有读写相关目录的权限
3. 调整system.yaml配置,确保组件通信正常
你的system.yaml只配置了节点IP,但建议补充Router的绑定配置,让所有微服务能正确识别Router的地址:
shared: node: ip: 172.16.217.147 hostname: artifactory-master router: entrypoints: internal: host: artifactory-master port: 8046
修改完成后,重启整个Artifactory服务栈:
$ARTIFACTORY_HOME/app/bin/artifactoryctl restart
4. 检查防火墙和SELinux的拦截
CentOS默认的firewalld可能会拦截8046端口,先临时关闭防火墙测试:
systemctl stop firewalld
如果关闭后问题解决,记得永久开放8046端口:
firewall-cmd --add-port=8046/tcp --permanent firewall-cmd --reload
另外,SELinux也可能阻止进程监听端口,临时关闭测试:
setenforce 0
如果有效,你可以配置SELinux允许Artifactory使用该端口,或者将SELinux调整为宽容模式。
5. 清理Router缓存后重新启动
如果之前启动失败留下了缓存文件,可能导致后续启动异常,先清理缓存:
rm -rf $ARTIFACTORY_HOME/var/data/router/cache
然后重新启动Artifactory:
$ARTIFACTORY_HOME/app/bin/artifactoryctl start
关键提醒
Artifactory 7.x的所有微服务都依赖Router完成注册和通信,所以Router必须最先启动成功。如果Router启动失败,其他服务都会陷入无限重试的循环。优先排查Router的日志,是解决这类问题的核心。
内容的提问来源于stack exchange,提问作者Joel Werginz

