MacBook Pro M3运行WSO2 Docker镜像失败求助
WSO2 MI Docker镜像启动失败:找不到Axis2HttpTransportSender类
问题背景
我使用MacOS Apple Silicon平台的WSO2 Integration Studio 8.2.0(内置WSO2 Micro Integrator 4.2.0),为示例项目构建Docker镜像后,运行时出现Carbon初始化失败的问题。
运行镜像的命令及错误日志如下:
pritish@172-117-001-070 ~ % export DOCKER_DEFAULT_PLATFORM=linux/amd64 pritish@172-117-001-070 ~ % docker run -p 8290:8290 -t healthcheck:1.0.0-SNAPSHOT
错误日志:
[2024-04-02 18:09:33,336] INFO {EventAdminConfigurationNotifier} - Logging configuration changed. (Event Admin service unavailable - no notification sent). [2024-04-02 18:09:34,482] FATAL {CoreServerInitializer} - WSO2 Carbon initialization Failed org.apache.axis2.AxisFault: Exception occured while loading the Axis configuration from /home/wso2carbon/wso2mi-4.0.0/conf/axis2/axis2.xml at org.wso2.micro.core.CarbonAxisConfigurator.getAxisConfiguration(CarbonAxisConfigurator.java:181) at org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContext(ConfigurationContextFactory.java:64) at org.wso2.micro.core.CarbonConfigurationContextFactory.createNewConfigurationContext(CarbonConfigurationContextFactory.java:66) at org.wso2.micro.integrator.core.internal.CoreServerInitializer.initializeCarbon(CoreServerInitializer.java:208) at org.wso2.micro.integrator.core.internal.CoreServerInitializer.initMIServer(CoreServerInitializer.java:125) at org.wso2.micro.integrator.core.internal.Activator.start(Activator.java:82) at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:842) at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1) at java.base/java.security.AccessController.doPrivileged(Native Method) at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:834) at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:791) at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1013) at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:365) at org.eclipse.osgi.container.Module.doStart(Module.java:598) at org.eclipse.osgi.container.Module.start(Module.java:462) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel$1.run(ModuleContainer.java:1820) at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor$2$1.execute(EquinoxContainerAdaptor.java:150) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1813) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1770) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1735) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1661) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1) at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:345) Caused by: org.apache.axis2.deployment.DeploymentException: org.apache.synapse.transport.netty.sender.Axis2HttpTransportSender cannot be found by axis2_1.6.1.wso2v63 at org.apache.axis2.deployment.AxisConfigBuilder.processTransportSenders(AxisConfigBuilder.java:718) at org.apache.axis2.deployment.AxisConfigBuilder.populateConfig(AxisConfigBuilder.java:125) at org.wso2.micro.core.CarbonAxisConfigurator.populateAxisConfiguration(CarbonAxisConfigurator.java:312) at org.wso2.micro.core.CarbonAxisConfigurator.getAxisConfiguration(CarbonAxisConfigurator.java:179) ... 23 more Caused by: java.lang.ClassNotFoundException: org.apache.synapse.transport.netty.sender.Axis2HttpTransportSender cannot be found by axis2_1.6.1.wso2v63 at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:512) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:423) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:415) at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:155) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:315) at org.apache.axis2.util.Loader.loadClass(Loader.java:261) at org.apache.axis2.deployment.AxisConfigBuilder.processTransportSenders(AxisConfigBuilder.java
解决步骤
1. 对齐MI版本
日志显示镜像内使用的是wso2mi-4.0.0,但本地Integration Studio内置的是MI 4.2.0,版本不匹配会导致依赖缺失:
- 修改项目Dockerfile,将基础镜像改为
wso2/wso2mi:4.2.0,确保与本地环境版本一致。
2. 修复Axis2配置依赖
若版本对齐后仍报错,检查传输发送器配置:
- 打开项目内
conf/axis2/axis2.xml,找到<transportSender>节点,确认org.apache.synapse.transport.netty.sender.Axis2HttpTransportSender对应的synapse-transport-netty_*.jar存在于镜像的wso2mi-4.2.0/lib目录。 - 若依赖缺失,手动添加该jar包到项目资源目录,构建镜像时同步到容器对应路径。
3. 优化Apple Silicon平台Docker配置
当前强制使用linux/amd64架构可能存在兼容性问题:
- 尝试使用WSO2官方ARM64架构镜像
wso2/wso2mi:4.2.0-arm64,无需设置DOCKER_DEFAULT_PLATFORM环境变量,直接构建运行。
4. 重新构建验证
- 清理旧镜像:
docker rmi healthcheck:1.0.0-SNAPSHOT - 重新构建镜像,确保所有依赖和配置文件正确同步到容器内。
- 运行镜像时根据选择的架构镜像,决定是否保留
DOCKER_DEFAULT_PLATFORM变量。
内容的提问来源于Stack Exchange,提问作者Pritish Mohanty
相关产品推荐
相关产品推荐

