Docker部署Artifactory后IP重定向异常排查求助
我之前碰到过几乎一模一样的情况,大概率是配置残留或者缓存搞的鬼,给你几个排查方向,按顺序试应该能解决:
优先检查Artifactory的持久化卷配置
你给Artifactory挂载了本地卷/volumes/artifactory:/var/opt/jfrog/artifactory,这个卷会永久保存Artifactory的所有配置和运行数据。之前用旧hosts访问时,Artifactory已经把当时的访问地址(旧IP+端口)写入了配置文件里,即使你后来删了hosts,容器重启后还是会读取这些残留配置。
操作步骤:- 先停止容器:
docker-compose stop artifactory - 进入宿主机的挂载目录搜索旧IP:
grep -r "66.88.88.88" /volumes/artifactory - 如果找到匹配的配置文件,先备份一份,然后把旧IP替换成正确的地址(比如
localhost:9081或者你实际要用的域名/IP) - 重新启动容器:
docker-compose up -d artifactory
- 先停止容器:
清理Docker容器与服务的DNS缓存
Docker本身和容器都有DNS缓存机制,可能还留存着旧的IP解析记录:- 先彻底删除旧的Artifactory容器(避免残留网络配置):
docker rm -f artifactory - 重启Docker服务刷新全局缓存:
systemctl restart docker(Linux系统) - 重新用docker-compose启动所有服务:
docker-compose up -d
- 先彻底删除旧的Artifactory容器(避免残留网络配置):
检查Artifactory后台的Base URL配置
改端口能访问后,登录Artifactory的管理员后台,进入Admin > General Configuration,找到Base URL选项。这个地址如果被设置成了旧IP+8081,就会导致所有重定向和生成的配置都带旧IP。手动改成当前的访问地址(比如http://localhost:9081/artifactory),保存后重启容器即可。清理宿主机的本地DNS缓存
有些Linux发行版会有系统级的DNS缓存,即使你删了/etc/hosts,缓存里的旧解析还在生效:- Ubuntu/Debian系统:执行
systemd-resolve --flush-caches - CentOS/RHEL系统:执行
service nscd restart
清理后再测试访问,看是否还会跳转到旧IP。
- Ubuntu/Debian系统:执行
检查Docker Daemon的DNS配置
查看Docker守护进程的配置文件/etc/docker/daemon.json,如果里面有dns字段,确认是不是指向了包含旧IP映射的DNS服务器。如果有异常配置,修改后重启Docker服务即可。
内容的提问来源于stack exchange,提问作者Christian Kullmann

