我们已经确定了答案。由于找到答案并非易事,原来的问题已经 3 周没有答案了,并且已经收到了赞成票,因此我会将答案添加到这个帖子中,这样在其他 Mendix 开发人员搜索“docker”+“debugger”时很有用”。
在 bash 中提供的解决方案
使用以下命令参数化并启动的容器:
docker run -it -p 8088:8080 \
-e ADMIN_PASSWORD='ApplicationAdminPassword1' \
-e DATABASE_ENDPOINT='postgres://pgPassword:pgUser@192.168.0.1:5432/pgDbName' \
-e M2EE_PASSWORD='PasswordForAdministrativeTasks1' \
mendix/mendix-buildpack:v1.2
可以像这样启用调试器:
curl -X POST -u 'MxAdmin:PasswordForAdministrativeTasks1' \
-H "Content-Type: application/json" \
-H "X-M2EE-Authentication: `echo -n 'PasswordForAdministrativeTasks1' | base64`" \
-H "Connection: close" \
-d '{"action": "enable_debugger", "params": {"password": "aRandomPassForDebugger1"}}' \
localhost:8088/_mxadmin/; echo
并且调试器可以正常使用,通过地址http://applicationHostIP:8088/debugger/使用您声明的密码“aRandomPassForDebugger1”。M2ee-tools 似乎只使用字母数字字符(也许是为了避免在某些上下文或情况下出现特殊字符的麻烦)——在这种情况下,必须通过延长密码强度来获得密码强度。M2ee-tools 使用超过 20 个字符。
第二个动作实际上可以使用多种工具来执行,而不是使用 curl。
对解决方案的评论
两本手册很有帮助,但需要付出一些努力才能“接受”并转化为启用调试器的方法。这些手册可以在docs.mendix.com和github.com/mendix上找到。
如您所见,为了与运行时通信,您需要发送带有简单身份验证和附加标头的 POST 消息。Mendix 团队已决定从 m2ee-tools 使用的管理端口迁移到应用程序配置 Web 端的“_mxadmin”目录中的 docker 容器中可用的服务。
注意这部分:
-H "X-M2EE-Authentication: `echo -n 'PasswordForAdministrativeTasks1' | base64`"
它是一个带有 base64 编码密码的标头(是的,在同一 POST 消息中再次提供了相同的密码,只是以不同的形式提供)。您可以将内联(计算 base64)替换为离线生成的字符串,在本例中为UGFzc3dvcmRGb3JBZG1pbmlzdHJhdGl2ZVRhc2tzMQ==
.
注意消息的paylod是一个json数据结构。许多有效负载操作只需要“action”子句,但其他一些额外需要参数(如 enable_debugger)。
与主题相关的操作
- enable_debugger
'{"action": "enable_debugger", "params": {"password": "aStrongPass"}}'
- 获取调试器状态
'{"action": "get_debugger_status"}'
- disable_debugger
'{"action": "disable_debugger"}'
- get_admin_action_info
'{"action": "get_admin_action_info"}'
最后列出的操作 (get_admin_action_info) 可能对找出与运行时消息通信的许多其他操作特别有用(它返回可用操作的列表),所以自己尝试一下。