如何从运行在 dockerized Tomee 服务器上的应用程序成功连接到

如何从运行在 dockerized Tomee 服务器上的应用程序成功连接到 Dockerized DB2 DB 服务器 - 两个容器都使用 jdk10?


到目前为止我尝试做的事情......


将 db2jcc4.jar 放入“/usr/local/tomee/lib”文件夹...


...从...获取:


    https://www-01.ibm.com/support/docview.wss?uid=swg21385217

Fwiw,tomcat服务器的初始启动抱怨它找不到pdq.jar ...:


    05-Sep-2018 16:48:04.901 INFO [localhost-startStop-1] org.apache.openejb.assembler.classic.Assembler.createApplication Deployed Application(path=C:\tools\apache-tomee-plume-7.0.5\webapps\docs)

    05-Sep-2018 16:48:04.956 WARNING [localhost-startStop-1] org.apache.tomcat.util.scan.StandardJarScanner.processURLs Failed to scan [file:/C:/tools/apache-tomee-plume-7.0.5/lib/pdq.jar] from classloader hierarchy

    java.io.IOException: java.lang.reflect.InvocationTargetException

            at org.apache.tomcat.util.compat.Jre9Compat.jarFileNewInstance(Jre9Compat.java:212)

            at org.apache.tomcat.util.scan.JarFileUrlJar.<init>(JarFileUrlJar.java:65)

            at org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:49)

            at org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:374)

            at org.apache.tomcat.util.scan.StandardJarScanner.processURLs(StandardJarScanner.java:309)

            at org.apache.tomcat.util.scan.StandardJarScanner.doScanClassPath(StandardJarScanner.java:266)

            at org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:229)

            at org.apache.tomee.loader.TomEEJarScanner.scan(TomEEJarScanner.java:69)

            at org.apache.catalina.startup.ContextConfig.processJarsForWebFragments(ContextConfig.java:1888)

            at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1116)

            at org.apache.catalina.startup.OpenEJBContextConfig.webConfig(OpenEJBContextConfig.java:411)


...所以我从 jar 的清单类路径中删除了 pdq.jar,此后 tomee/tomcat 服务器启动干净。


我部署了一个简单的 REST 应用程序——包含一个 GET 方法——它利用一个简单的 jdbc 调用从 IBM“SAMPLE”数据库(与 db2express-c 捆绑在一起)中提取数据


该应用程序看起来像这样......


慕盖茨4494581
浏览 171回答 2
2回答

隔江千里

您正在尝试使用 iplocalhost从 tomcat 容器连接到数据库。但实际上数据库是单独的容器。因此,要么您必须使用aliasdb 机器,要么以主机网络模式或具有端口转发的桥接模式将其连接到主机,然后您必须使用主机的静态 ip将其连接为以下任一方式来自 tomcat。jdbc:db2://<host-machine-static-ip>:50000/SAMPLEjdbc:db2://<docker-container-ip>:50000/SAMPLEjdbc:db2://<docker-container-alias>:50000/SAMPLE让我简要地解释一下。我的假设:Tomcat 服务器和数据库服务器作为不同的容器运行。两者都连接到不同的 docker 网络。您尚未在 db 服务器中转发端口。您尚未为容器定义 docker-compose 文件。您正在使用docker run.如果我的所有假设都是正确的,那么docker network config就有问题。基本上有不同的方法可以从一个容器连接到另一个容器。通过为每个容器定义别名并将其连接到同一网络(推荐)。通过从主机到 docker 容器的端口转发,并使用主机的静态 ip 连接到该端口。通过在主机网络中运行容器并使用主机的静态 ip 连接到所需的端口。通过为 docker 容器定义静态 ip 并使用该 ip 从其他容器连接。推荐方式简述您必须为容器定义别名,为此您可以使用服务名称,也可以声明其他别名。然后两者都应该连接到同一个网络,然后只有 docker 服务发现才能工作。完成每件事后,您可以使用另一台机器的别名从一个容器连接到另一个容器。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java