使用 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 容器?)链接到您的应用程序容器,您能否也向我们展示 Dockerfiledocker 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随笔33:在容器中连接oracle数据库

docker删除容器后,重写创建容器PORTS为空

docker容器安装oracle数据库

无法使 Docker 容器使用 OpenConnect *** 连接

无法从 Spring Boot Docker 容器连接 mysql Docker 容器

win7系统本地怎么连接Oracle VM VirtualBox虚拟机中docker容器中的ubuntu镜像中的mysql