2016-03-25 61 views
0
Docker version: 1.10 
Env : CentOS 7 

在我的本地機器上,我將應用程序部署到docker映像到容器,然後另存爲tar文件。然後將tar文件複製到測試環境,並運行docker load命令以安裝圖像和具有該圖像的創建容器。使用Docker容器後無法連接Oracle數據庫

但是,當應用程序正在運行時,它無法連接到我的本地機器上從未發生過的數據庫。測試環境可以ping通數據庫服務器。

以下是錯誤信息。任何人都可以告訴我是否有必要打開任何端口來連接數據庫或任何建議嗎?非常感謝!

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 
+0

因此,您是否已將Oracle dabase(是否爲docker容器?)鏈接到應用程序容器,您能向我們展示Dockerfile和docker run命令嗎? – BMW

+0

我沒有在docker文件中做任何oracle數據庫設置。該應用程序使用spring框架來初始化數據庫實例。它可以連接到我的本地VM中的數據庫。是否需要爲docker容器中的連接數據庫進行任何配置? –

回答

0

請嘗試下面的CMD,一個或兩個。

  1. CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/MCI3/cs-mci3.jar", "-Xmx100m"]

  2. 集泊塢窗--mtu=1400