使用 Docker 容器后无法连接 Oracle 数据库
Posted
技术标签:
【中文标题】使用 Docker 容器后无法连接 Oracle 数据库【英文标题】:Cannot connection Oracle Database after using Docker container 【发布时间】:2016-03-25 04:34:56 【问题描述】:Docker version: 1.10
Env : CentOS 7
在我的本地机器上,我将我的应用程序部署到 docker 镜像到容器中,然后保存为 tar 文件。然后将 tar 文件复制到测试环境并运行 docker load 命令安装映像并使用该映像创建容器。
但是,当应用程序运行时,它无法连接到我的本地计算机中从未发生过的数据库。并且测试环境可以ping通DB服务器。
以下是错误消息。谁能告诉我是否有必要为docker打开任何端口来连接数据库或任何建议?非常感谢!!
java.sql.SQLRecoverableException: IO Error: Connection reset
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:498)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConn`enter code here`ection.java:553)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528)
at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:280)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:207)
at oracle.jdbc.pool.OracleConnectionPoolDataSource.getPhysicalConnection(OracleConnectionPoolDataSource.java:151)
at oracle.jdbc.pool.OracleConnectionPoolDataSource.getPooledConnection(OracleConnectionPoolDataSource.java:89)
at oracle.jdbc.pool.OracleImplicitConnectionCache.makeCacheConnection(OracleImplicitConnectionCache.java:1629)
at oracle.jdbc.pool.OracleImplicitConnectionCache.makeOneConnection(OracleImplicitConnectionCache.java:519)
at oracle.jdbc.pool.OracleImplicitConnectionCache.getCacheConnection(OracleImplicitConnectionCache.java:479)
at oracle.jdbc.pool.OracleImplicitConnectionCache.getConnection(OracleImplicitConnectionCache.java:360)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:395)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:179)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:157)
Below is the docker file:
enter code here
FROM centos
EXPOSE 8001 9001
RUN yum update -y && \
curl --insecure --junk-session-cookies --location --remote-name --silent --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u74-b02/jdk-8u74-linux-x64.rpm && \
yum localinstall -y jdk-8u74-linux-x64.rpm && \
rm jdk-8u74-linux-x64.rpm && \
yum clean all
ENV JAVA_HOME=/usr/java/default \
LANG=en_US.UTF-8 \
LC_ALL=en_US.UTF-8
WORKDIR /MCI3
COPY MCI3/ /MCI3/
CMD ["java","-jar","/MCI3/cs-mci3.jar", "-Xmx100m"]
------------------------------------------------------------
In my local machine:
docker build -t [IMAGE_NAME] .
docker save -o [TAR_FILE_NAME] [IMAGE_NAME:IMAGE_TAG]
After create the tar file then copy it to the testing env( no any internet) :
sudo docker load --input [PATH_TO_TAR_FILE]
sudo docker run -p 9001:9001 -p 8001:8001 --name cs-mci3_container cs-mci3_image
【问题讨论】:
那么您是否将 oracle 数据库(也是 docker 容器?)链接到您的应用程序容器,您能否也向我们展示Dockerfile
和 docker run
命令?
我没有在 docker 文件中做任何 oracle 数据库设置。该应用程序使用 spring 框架来初始化数据库实例。它可以连接到我本地虚拟机中的数据库。 docker容器中的connect db是否需要做任何配置?
【参考方案1】:
请尝试下面的 CMD,一个或两个。
CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/MCI3/cs-mci3.jar", "-Xmx100m"]
设置泊坞窗--mtu=1400
。
【讨论】:
以上是关于使用 Docker 容器后无法连接 Oracle 数据库的主要内容,如果未能解决你的问题,请参考以下文章
无法使 Docker 容器使用 OpenConnect *** 连接
无法从 Spring Boot Docker 容器连接 mysql Docker 容器
win7系统本地怎么连接Oracle VM VirtualBox虚拟机中docker容器中的ubuntu镜像中的mysql