Docker容器中ActiveMQ Artemis的Jolokia GUI访问问题
这个问题的核心是Jolokia的跨域访问控制配置不匹配实际访问的Origin。你当前的jolokia-access.xml只允许*://0.0.0.0*的请求源,但远程访问时用的是http://10.0.20.2:58161,这个Origin不在允许列表里,所以触发了权限错误,进而导致前端JS报错。
下面是具体的解决步骤:
1. 调整Jolokia的跨域允许规则
修改jolokia-access.xml中的<allow-origin>配置,让它匹配你实际访问的Origin。有几种灵活的配置方式:
方式一:允许所有Origin(适合测试环境)
把原配置替换成:
<allow-origin>*://*</allow-origin>
这种配置会允许任何协议、任何IP和端口的请求,测试环境用起来最方便,但生产环境不推荐。
方式二:指定具体的IP和端口范围(适合生产/QA环境)
如果你的访问IP固定是10.0.20.2,端口是38161/48161/58161,可以配置:
<allow-origin>http://10.0.20.2:*</allow-origin>
或者精确匹配每个端口:
<allow-origin>http://10.0.20.2:38161</allow-origin> <allow-origin>http://10.0.20.2:48161</allow-origin> <allow-origin>http://10.0.20.2:58161</allow-origin>
2. 在Docker环境中应用修改
因为是Docker容器,有两种常见的修改方式:
方式一:挂载自定义配置文件(推荐)
在宿主机创建一个修改好的jolokia-access.xml,然后在启动容器时挂载这个文件到容器内的对应路径。假设你的ActiveMQ Artemis容器内配置路径是/var/lib/artemis/etc/jolokia-access.xml,启动命令可以改成:
docker run -d \ -p 38161:8161 \ # 其他端口映射... -v /宿主机路径/jolokia-access.xml:/var/lib/artemis/etc/jolokia-access.xml \ your-artemis-image:tag
这种方式不需要修改容器镜像,配置变更更灵活,也方便后续维护。
方式二:进入容器修改后重启
如果只是临时测试,可以进入容器修改配置:
- 进入运行中的容器:
docker exec -it your-artemis-container-name bash
- 找到
jolokia-access.xml文件(通常在etc目录下),用编辑器修改:
vi etc/jolokia-access.xml
- 保存退出后,重启容器让配置生效:
docker restart your-artemis-container-name
3. 验证修改
重启容器后,再次从远程计算机访问Hawtio控制台,登录后应该不会再出现Origin不允许的错误,前端JS的Cannot read property 'apply' of undefined错误也会随之消失——因为这个JS错误是跨域请求失败导致的连锁问题。
内容的提问来源于stack exchange,提问作者djb

