Docker 容器 运行 一台计算机而不是另一台

Docker container running one computer and not another

我正在尝试通过 Docker 部署 WebSphere Liberty 应用程序。我还为 UI 使用 Apache Struts。在我的本地机器上部署时我没有问题,但是当放在任何其他机器上时,它会抛出一个错误,说 struts2 过滤器无法加载。 类好像没有少

为什么这个容器可以在一台机器上运行,而不能在另一台机器上运行?

堆栈跟踪:

[ERROR   ] SRVE0321E: The [struts2] filter did not load during start up.

Filter [struts2]: could not be initialized

[ERROR   ] SRVE0315E: An exception occurred: java.lang.Throwable: javax.servlet.ServletException: Filter [struts2]: could not be initialized

at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:5027)

at [internal classes]

Caused by: javax.servlet.ServletException: Filter [struts2]: could not be initialized

at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.init(FilterInstanceWrapper.java:163)

... 1 more

Caused by: Unable to create SAX parser - Class: com.icl.saxon.aelfred.SAXParserFactoryImpl

File: SAXParserFactoryImpl.java

Method: newSAXParser

Line: 34 - com/icl/saxon/aelfred/SAXParserFactoryImpl.java:34:-1

at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:835)

at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadDocuments(XmlConfigurationProvider.java:131)

at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.init(XmlConfigurationProvider.java:100)

at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reload(DefaultConfiguration.java:130)

at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:52)

at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:395)

at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:452)

at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:201)

at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.init(FilterInstanceWrapper.java:149)

... 1 more

Caused by: Unable to create SAX parser - Class: com.icl.saxon.aelfred.SAXParserFactoryImpl

File: SAXParserFactoryImpl.java

Method: newSAXParser

Line: 34 - com/icl/saxon/aelfred/SAXParserFactoryImpl.java:34:-1

at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:111)

at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:830)

... 9 more

Caused by: javax.xml.parsers.ParserConfigurationException: AElfred parser is non-validating

at com.icl.saxon.aelfred.SAXParserFactoryImpl.newSAXParser(SAXParserFactoryImpl.java:34)

at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:109)

... 10 more

Caused by: javax.xml.parsers.ParserConfigurationException: AElfred parser is non-validating

struts2 需要一个验证解析器。由于此解析器是非验证的,因此应将其从类路径中删除。

可以在 saxon.jar 中找到受影响的解析器。

感谢 Roman,我能够更正确地将此问题诊断为撒克逊 XML 解析器问题。我尝试只替换我的 JAR,这实际上适用于一些测试,但后来坏了。

本论坛post最终解决问题:http://grokbase.com/t/tomcat/users/031xc9jye7/i-cant-use-saxon-xml-parser-in-my-web-app-please-help

我的网络服务器 (WebSphere Liberty) 试图使用 Saxon 作为 XML 解析器,但是 Saxon 是非验证的,因此失败了,特别是在 Docker 我正在尝试这个.

为了解决这个问题,我必须从 JAR 中删除文件 javax.xml.parsers.SAXParserFactory,然后正确地删除服务器 运行。